为什么clang生成的二进制文件大于visual studio生成的二进制文件
问题描述:
这只是一段“hello world”C++代码。为什么clang生成的二进制文件大于visual studio生成的二进制文件
#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-cl接受flag/MD而不是clang。问题已解决。我仍然需要探索clang和clang-cl之间的区别。
+0
不知道本地Clang标志是用于动态链接的。 clang-cl是Clang编译器的前端/包装器,提供了与MSVC编译器cl.exe兼容的接口。按照您描述的方式完成安全操作。 –
我的水晶球说Clang默认静态链接运行时库,而MSVC默认动态链接它们。这意味着MSVC生成的二进制文件较小,但需要一个辅助运行时DLL。检查您的编译器/链接器设置以验证确实如此。 –
您也可以尝试使用Clang的“-Oz”标志。 – arrowd
@CodyGray谢谢。您的水晶球是否知道如何动态链接运行时库。我没有提示Google搜索。 – user3113626