2011-09-04 71 views
6

是否有任何免費的GCC兼容套件可用於生成獨立可執行文件而無需外部依賴關係?沒有外部依賴關係的Windows GNU編譯器套件

這是不符合該法案,通過不受歡迎訂購了幾下,最低到最高:

  • MinGW(MSVCRT.DLL)
  • Cygwin(Cygwin的運行時的DLL)
  • DJGPP(NTVDM .EXE;在x64平臺上不存在)

現在我傾向於(並使用盡管暫時)MinGW,因爲它似乎是「最乾淨的」做法。我仍然對MSVCRT.DLL依賴不感興趣,特別是我可以並且必須處理運行Win2K之前的客戶。 (Windows 2000是MSVCRT.DLL附帶的第一個版本)將MSVCRT與應用程序分發不是一種選擇。

P.S .:我意識到有人試圖爲MinGW創建一個MSVCRT替代品,但它仍然不穩定/ beta,並且功能有限;不是我感覺舒適的用於生產應用的東西。

P.P.S .:「MSCVRT通常有這種效果」或「僅包裝redist」的效果不是建設性的答案。這個問題具體問到如何避免依賴,而不是確保它們的存在。

+1

MSVCRT應該作爲可再發行組件的一部分進行安裝。即使Microsoft工具在將運行時鏈接爲DLL而非靜態鏈接時也有此限制。 –

+0

相關問題:http://stackoverflow.com/questions/3943412/can-i-link-msvcrt-statically-with-mingw –

+0

與mingw,你不能靜態鏈接從平臺SDK的靜態庫嗎? –

回答

9

爲了避免MSVCRT與MinGW的,使用下面的選項鍊接器:

-nostdlib -Wl,--exclude-libs,msvcrt.a -Wl,-eWinMain 

請注意,您必須聲明一個名爲WinMain功能(你也可以選擇它的另一個名字),這將是你main 。您也不能使用任何標準功能,如strlen,printf和朋友。相反,你必須使用WinAPI的等價物像lstrcmpwsprintf

你可以看到這一點使用SCons的一個例子:

http://nsis.svn.sourceforge.net/viewvc/nsis/NSIS/trunk/SCons/Config/gnu?revision=6160&view=markup

我用這個爲我的項目也需要Windows 9x兼容性。這也具有較小的可執行文件的不錯副作用。從上面的評論看來,你似乎也在尋找。如果是這種情況,則可以在上面鏈接的文件中使用更多技巧。

微軟有一個表匹配CRT功能WinAPI的在下面的KB:

http://support.microsoft.com/default.aspx?scid=kb;EN-US;q99456

上(雖然VC,它仍然可以幫助)在擺脫CRT的詳細資料http://www.catch22.net/tuts/minexe

+1

我希望看到更多的靜態鏈接與libcmt.lib,但仍然很好的答案。 – Unsigned

+1

太棒了,還沒有嘗試過,但我一直在尋找這個信息,人們甚至說我的問題是一個重複! http://stackoverflow.com/questions/23218931/build-mingw-console-application-without-crt?lq=1 – paulm