「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つのバージョンのバイナリの違いを説明できますか? ご協力いただければ幸いです。
私のクリスタルボールは、MSVCがデフォルトで動的にリンクするのに対し、Clangはデフォルトでランタイムライブラリを静的にリンクしていると言います。つまり、MSVCで生成されたバイナリは小さくなりますが、補助ランタイムDLLが必要です。コンパイラ/リンカの設定を確認して、これが本当に正しいかどうか確認してください。 –
また、Clangの '-Oz'フラグを試すこともできます。 – arrowd
@CodyGrayありがとうございました。あなたのクリスタルボールは、ランタイムライブラリを動的にリンクする方法を知っていますか?私はヒントなしでグーグルで行った。 – user3113626