与 VCC 相比,为什么 GCC 会产生巨大的可执行文件?
我有一个项目并不是很大。使用 Visual Studio 的 C++ 编译器,可执行文件大小为 100+KB。但对于 mingw GCC,它会增加到 500+ KB。同样的事情也发生在 Linux 上。这是针对发布版本的。对于调试构建,GCC 生成 1.4MB,而 VS 的 C++ 编译器仅生成 400+KB。到底是什么原因造成如此巨大的差异呢?它与静态/动态链接有什么关系吗?我可以做什么来减少 GCC 生成的可执行文件的大小?
I have a project that's not really big. With Visual Studio's C++ compiler the executable is 100+KB. But with mingw GCC it goes up to 500+ KB. Same thing happens on Linux. That's for the release build. For debug build GCC produces 1.4MB while VS's C++ compiler only produces 400+KB. What's the reason that causes such a huge discrepancy? Does it have anything to do with static/dynamic linking? What can I do to reduce the executable size produced by GCC?
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(2)
有关如何缩小 GCC 输出大小的信息,请参阅此页面:http://wiki.wxwidgets.org/Reducing_Executable_Size
See this page on how to shrink GCC output size: http://wiki.wxwidgets.org/Reducing_Executable_Size
您是否将
-s
标志传递给 GCC?Visual Studio 与 CRT 的链接是静态还是动态?海湾合作委员会怎么样? VC 很可能是动态链接(
/MD
标志,而不是/MT
),而 GCC 是静态链接(-static-libgcc
标志,和其他)...尝试使它们一致,然后看看是否有差异。一种判断方法是检查您的 VC 链接可执行文件是否依赖于
msvcr80.dll
(或其他版本),并查看您的 GCC 链接可执行文件是否依赖于某些mingw
DLL。如果是的话,那么它们就是动态链接的;如果它们确实独立运行,那么它们就是静态链接的。Did you pass the
-s
flag to GCC?Is Visual Studio linking with the CRT statically or dynamically? How about GCC? It's likely that VC is linking dynamically (
/MD
flag, instead of/MT
) whereas GCC is linking statically (-static-libgcc
flag, and otehrs)... try making them consistent and then seeing if there's a difference.One way to tell is to check if your VC-linked executable depends on
msvcr80.dll
(or a different version), and to see if your GCC-linked executable depends on somemingw
DLL. If they do, then they're dynamically linked; if they truly run standalone, then they're statically linked.