2011-09-04 62 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