2016-12-05 21 views
0

Это всего лишь кусок кода «привет мир» на 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

Вы также можете попробовать флаг '-Oz' для Clang. – arrowd

+0

@CodyGray Спасибо. Ваш хрустальный шар знает, как динамически связывать библиотеки времени выполнения. Я без глюков искал googled. – user3113626

ответ

0

Я использую clang-cl, который принимает флаг/MD вместо clang. Проблема решена. Мне все еще нужно исследовать, в чем разница между clang и clang-cl.

+0

Не знаю, что такое собственный флаг Clang для динамической компоновки. clang-cl является интерфейсом/оболочкой для компилятора Clang, который представляет интерфейс, совместимый с компилятором MSVC, cl.exe. Вы совершенно безопасны, делая это так, как вы описали. –