2016-12-05 164 views
0

這只是一段「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

回答

0

我用clang-cl接受flag/MD而不是clang。問題已解決。我仍然需要探索clang和clang-cl之間的區別。

+0

不知道本地Clang標誌是用於動態鏈接的。 clang-cl是Clang編譯器的前端/包裝器,提供了與MSVC編譯器cl.exe兼容的接口。按照您描述的方式完成安全操作。 –