要避免 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