2016-12-05 4 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でそれをコンパイルしている間、ターゲットの実行可能ファイルのサイズはわずか6キロバイトリリースバージョンと28キロバイトデバッグバージョンのためです。

誰でも2つのバージョンのバイナリの違いを説明できますか? ご協力いただければ幸いです。

+1

私のクリスタルボールは、MSVCがデフォルトで動的にリンクするのに対し、Clangはデフォルトでランタイムライブラリを静的にリンクしていると言います。つまり、MSVCで生成されたバイナリは小さくなりますが、補助ランタイムDLLが必要です。コンパイラ/リンカの設定を確認して、これが本当に正しいかどうか確認してください。 –

+0

また、Clangの '-Oz'フラグを試すこともできます。 – arrowd

+0

@CodyGrayありがとうございました。あなたのクリスタルボールは、ランタイムライブラリを動的にリンクする方法を知っていますか?私はヒントなしでグーグルで行った。 – user3113626

答えて

0

clangの代わりに/ MDを受け入れるclang-clを使用します。問題は解決しました。私はまだclangとclang-clの違いを探る必要があります。

+0

ダイナミックリンクのネイティブClangフラグが何であるかわかりません。 clang-clは、MSVCのコンパイラcl.exeと互換性のあるインタフェースを提供するClangコンパイラのフロントエンド/ラッパーです。あなたはあなたが説明したようにそれをすることは完全に安全です。 –

関連する問題