是否有适用于Windows的免费,兼容GCC的套件,它们可以生成独立的可执行文件而没有外部依赖关系?

以下是一些不符合要求的 list ,按不合要求的顺序排列,至少在大多数情况下如此:

  • MinGW(MSVCRT.DLL)
  • Cygwin(Cygwin运行时DLL)
  • DJGPP(NTVDM.EXE;在x64平台上不存在)

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

    附注:我知道有人试图为MinGW创建MSVCRT替代品,但它仍然不稳定/测试版,并且功能有限;对于生产应用程序,我感到不舒服。

    P.P.S .:关于“通常总是存在MSCVRT”或“仅打包Redist”效果的答案不是 build 性的答案。该问题专门询问如何避免依赖关系,而不是确保依赖关系的存在。

    最佳答案

    为了避免将MSVCRT与MinGW配合使用,请对链接器使用以下标志:

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

    请注意,您必须声明一个名为WinMain的函数(也可以为其选择其他名称),它将成为您的main。您也不能使用任何标准功能,例如strlenprintf和friends。而是必须使用WinAPI等效项,例如lstrcmpwsprintf等。

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

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

    我在需要Windows 9x兼容性的项目中使用了此功能。这也具有较小的可执行文件的副作用。从上面的评论看来,您也正在寻找它。如果是这样,您可以在上面链接的文件中使用更多技巧。

    Microsoft在下面的KB99456处具有将CRT功能与WinAPI匹配的表:

    Win32 Equivalents for C Run-Time Functions(Web Archive)

    有关摆脱CRT的更多信息(尽管对于VC,它仍然可以提供帮助)位于:

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

    关于Windows GNU编译器套件,无外部依赖,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/7301995/

    10-11 02:05