为啥 clang 生成的二进制文件比 Visual Studio 生成的大
Posted
技术标签:
【中文标题】为啥 clang 生成的二进制文件比 Visual Studio 生成的大【英文标题】:Why the binary produced by clang is larger than that's produced by visual studio为什么 clang 生成的二进制文件比 Visual Studio 生成的大 【发布时间】:2016-12-05 11:50:51 【问题描述】:这只是一段“hello world”C++ 代码。
#include <stdio.h>
int main(int argc, char* argv[])
printf("hello");
return 0;
我用 clang 3.9 编译了代码。命令为:clang -m32 hello.cpp -o hello.exe,目标可执行文件大小约为44kb。将“O3”选项添加到命令中没有任何区别。
当我用Visual Studio 2010编译它时,目标可执行文件的大小对于发布版本只有6kb,对于调试版本只有28kb。
谁能帮助解释两个版本的二进制文件之间的区别。 任何帮助将不胜感激。
【问题讨论】:
我的水晶球说 Clang 默认静态链接运行时库,而 MSVC 默认动态链接它们。这意味着 MSVC 生成的二进制文件更小,但需要一个辅助运行时 DLL。检查您的编译器/链接器设置以验证是否确实如此。 你也可以试试-Oz
标记 Clang。
@CodyGray 谢谢。你的水晶球是否知道如何动态链接运行时库。我在没有任何提示的情况下进行了谷歌搜索。
@arrowd -Oz 标志不会改变任何东西。无论如何谢谢。
【参考方案1】:
我使用接受标志 /MD 而不是 clang 的 clang-cl。问题已解决。我还需要探索一下clang和clang-cl有什么区别。
【讨论】:
不知道用于动态链接的原生 Clang 标志是什么。 clang-cl 是 Clang 编译器的前端/包装器,提供与 MSVC 编译器 cl.exe 兼容的接口。按照您描述的方式进行操作是绝对安全的。以上是关于为啥 clang 生成的二进制文件比 Visual Studio 生成的大的主要内容,如果未能解决你的问题,请参考以下文章
为啥我的 Visual Studio .obj 文件比输出的 .exe 文件大?
Clang vs GCC - 产生更快的二进制文件? [关闭]