Это мой первый вопрос здесь, я большой поклонник и нашел много решений в stackoverflow, поэтому большое спасибо всем. Я был бы счастлив, если бы мой вопрос был тем, что стоит времени.
Я использую Windows 7 и Microsft Visual C++ 2010 Express. Код C:
int main()
{
return 0;
}
При компиляции кода с идеей, с свойствами проекта → C/C++ → CodeGeneration → Runtime Library =/MTd, размер exe составляет 395,264 байт. При компиляции программы под консолью с помощью cl.exe с помощью командной строки Visual Studio "cl test.c" размер exe равен 31,744.
РАЗМЕРЫ: 1. 395 264 2. 31 744
Любая идея, почему существуют большие различия в размерах?
Спасибо.
Потому как:
/M
Где-то в среде IDE перейдите к свойствам тестового проекта. Откройте Свойства конфигурации → C/C++ → Свойства командной строки и конфигурации → Линкера → Командная строка. Это покажет вам все параметры, с которыми ваша IDE вызывает компилятор и компоновщик.
Сам факт, что IDE использует так много опций, должен сказать вам, что он не использует значения по умолчанию для инструментов.
Если вы перейдете в командную строку и вызовите компилятор и компоновщик с теми же параметрами, что указаны в IDE, то полученный исполняемый файл должен быть на 100% идентичен.
Компиляция в VS с опцией /MTd
заключается в создании вашей программы с многопоточными библиотеками отладки в конечном исполняемом файле, что приведет к увеличению размера вашего двоичного кода для этих дополнительных объектов.
Команда компиляции только исходного файла не приведет к привязке какого-либо дополнительного объектного кода и приведет к уменьшению exe.
См. Эту страницу для дополнительной справки
Когда я использую тот же исходный код, с теми же параметрами компилятора, я получаю конечный размер 391K. Из командной строки я получаю следующее:
cl MyProg.cpp -> 31K
cl /MTd MyProg.cpp -> 137K
Если вы включите некоторые другие параметры, которые IDE вам включает в себя, вы получите следующее:
cl /MTd /Gm /ZI /EHsc MyProg.cpp -> 378K
Это просто вопрос разницы между командами сборки, которые вызывают разницу.