为什么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的调试版本。

任何人都可以帮助解释两个版本的二进制文件之间的区别。 任何帮助,将不胜感激。

+1

我的水晶球说Clang默认静态链接运行时库,而MSVC默认动态链接它们。这意味着MSVC生成的二进制文件较小,但需要一个辅助运行时DLL。检查您的编译器/链接器设置以验证确实如此。 –

+0

您也可以尝试使用Clang的“-Oz”标志。 – arrowd

+0

@CodyGray谢谢。您的水晶球是否知道如何动态链接运行时库。我没有提示Google搜索。 – user3113626

我用clang-cl接受flag/MD而不是clang。问题已解决。我仍然需要探索clang和clang-cl之间的区别。

+0

不知道本地Clang标志是用于动态链接的。 clang-cl是Clang编译器的前端/包装器,提供了与MSVC编译器cl.exe兼容的接口。按照您描述的方式完成安全操作。 –