无需外部依赖的 Windows GNU 编译器套件

2024-02-22

是否有任何免费的、与 GCC 兼容的 Windows 套件可以生成独立的可执行文件而无需外部依赖项?

以下是一些不符合要求的内容,按不受欢迎程度排序:

  • MinGW http://mingw.org(MSVCRT.DLL)
  • Cygwin http://cygwin.com/(Cygwin 运行时 DLL)
  • DJGPP http://delorie.com/djgpp/(NTVDM.EXE;x64 平台上不存在)

现在我倾向于(并且暂时使用)MinGW,因为它似乎确实是“最干净”的方法。我仍然对 MSVCRT.DLL 依赖项不感兴趣,特别是因为我可以并且确实必须与运行 Win2K 之前版本的客户打交道。 (Windows 2000 是第一个附带 MSVCRT.DLL 的版本)不能选择随应用程序分发 MSVCRT。

P.S.:我知道有人尝试创建 MinGW 的 MSVCRT 替代品,但它仍然不稳定/测试版,并且功能有限;我不太愿意将其用于生产应用程序。

P.P.S.:对“MSCVRT 通常是存在的”或“只需打包 redist”之类的答案并不是建设性的答案。该问题具体询问如何避免依赖关系,而不是确保它们的存在。


要避免 MinGW 出现 MSVCRT,请对链接器使用以下标志:

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

请注意,您必须声明一个名为WinMain(您也可以为其选择其他名称)这将是您的main。您也不能使用任何标准函数,例如strlen, printf和朋友。相反,您必须使用 WinAPI 等效项,例如lstrcmp, wsprintf, etc.

您可以在以下位置查看使用 SCons 的示例:

https://sourceforge.net/p/nsis/code/6160/tree/NSIS/trunk/SCons/Config/gnu https://sourceforge.net/p/nsis/code/6160/tree/NSIS/trunk/SCons/Config/gnu

我已将其用于我的项目,该项目也需要 Windows 9x 兼容性。这还有一个很好的副作用:可执行文件较小。从您上面的评论来看,您似乎也在寻找这一点。如果是这种情况,您可以在我上面链接的文件中使用更多技巧。

Microsoft 在以下 KB99456 中有一个将 CRT 函数与 WinAPI 匹配的表:

C 运行时函数的 Win32 等效项 https://support.microsoft.com/en-gb/help/99456/win32-equivalents-for-c-run-time-functions (网络档案 https://web.archive.org/web/20150222105128/http://support2.microsoft.com/kb/99456)

有关摆脱 CRT 的更多信息(尽管对于 VC 来说,它仍然有帮助),请访问:

http://www.catch22.net/tuts/win32/reducing-executable-size http://www.catch22.net/tuts/win32/reducing-executable-size

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

无需外部依赖的 Windows GNU 编译器套件 的相关文章

随机推荐