2012-10-16 64 views
3

在Windows中,有一個默認的C庫msvcrt.dll。鏈接到系統C庫msvcrt.dll

是否可以編寫使用msvcrt.dll函數的簡單C程序?這將減輕安裝最新VC運行時的需要。

我認爲,一個可行的辦法是明確指定/ NODEFAULTLIB,並使用DLL導入過程導入MSVCRT.DLL功能。

任何人都有線索?

+0

@C64先生無需作出評論。每個對變更感興趣的人都可以看到編輯歷史記錄中的人是誰。 – rubenvb

+2

不,它是Windows可執行文件使用的專用CRT。您沒有可用的鏈接庫來鏈接它。微軟也沒有義務解決更新時可能發生的任何問題。 –

+0

您不需要安裝VC運行時。你可能會被建議這樣做,但你可以靜態鏈接它。 –

回答

2

可以使用的MinGW-W64 GCC,可鏈接到msvcrt.dll整整你所說的原因。

你可以找到下載here。如果您不想重新分配任何DLL,則可以將程序與-static-libgcc -static-libstdc++鏈接。

話雖這麼說,你可以只是簡單的出貨msvcr*.dll文件旁邊的可執行文件,無需安裝任何東西。

2

你不想使用msvcrt.dll。

  • 它很舊,因此不符合現代C運行庫規範。
  • 它主要是爲了後向兼容性而使用,並且對certain system components有特殊要求。
  • 如果發現安全問題,您不能指望它會被廣泛修補。
  • 不能保證使用現代編譯器製作的二進制文件將與msvcrt.dll中的ABI兼容。
  • 現代C和C++編譯器有深入的瞭解和他們的運行時庫的預期方面的優化,設置和拆除,所以你不應該混合和匹配。

使用隨你的編譯器的運行時庫。如果你不想擔心重新分配,你可以靜態鏈接到它,或者你可以閱讀關於重新分配你的應用程序的正確方法。

+1

這不是很古老,因爲有很多現代功能,如strcpy_s。 – palota

+1

微軟肯定會修補msvcrt.dll中的任何安全問題,因爲許多Windows進程和服務都使用它。 – palota

+1

@palota:strcpy_s是在2005年左右推出的,所以它不是現代的。微軟將在msvcrt.dll中修補一個安全問題_if_他們的一個應用程序或服務會暴露該漏洞。如果該漏洞只通過第三方應用程序公開,我不會依賴它。 –