Различные размеры исполняемых файлов при компиляции с использованием среды разработки Visual C ++ Express 2010 и компиляции в консоли с помощью команды cl

0

Это мой первый вопрос здесь, я большой поклонник и нашел много решений в 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

Любая идея, почему существуют большие различия в размерах?

Спасибо.

Теги:
ide

2 ответа

2
Лучший ответ

Потому как:

  1. Есть еще много VC++ параметров компилятора, а не только семейство опций /M
  2. Некоторые из этих параметров могут повлиять на размер исполняемого файла.
  3. Параметры IDE по умолчанию для нового проекта отличаются от значений по умолчанию для компилятора и компоновщика.

Где-то в среде IDE перейдите к свойствам тестового проекта. Откройте Свойства конфигурации → C/C++ → Свойства командной строки и конфигурации → Линкера → Командная строка. Это покажет вам все параметры, с которыми ваша IDE вызывает компилятор и компоновщик.

Сам факт, что IDE использует так много опций, должен сказать вам, что он не использует значения по умолчанию для инструментов.

Если вы перейдете в командную строку и вызовите компилятор и компоновщик с теми же параметрами, что указаны в IDE, то полученный исполняемый файл должен быть на 100% идентичен.

  • 0
    Большое спасибо.
2

Компиляция в VS с опцией /MTd заключается в создании вашей программы с многопоточными библиотеками отладки в конечном исполняемом файле, что приведет к увеличению размера вашего двоичного кода для этих дополнительных объектов.

Команда компиляции только исходного файла не приведет к привязке какого-либо дополнительного объектного кода и приведет к уменьшению exe.

См. Эту страницу для дополнительной справки

Когда я использую тот же исходный код, с теми же параметрами компилятора, я получаю конечный размер 391K. Из командной строки я получаю следующее:

cl MyProg.cpp -> 31K
cl /MTd MyProg.cpp -> 137K

Если вы включите некоторые другие параметры, которые IDE вам включает в себя, вы получите следующее:

cl /MTd /Gm /ZI /EHsc MyProg.cpp -> 378K

Это просто вопрос разницы между командами сборки, которые вызывают разницу.

  • 0
    Я сделал эту опцию, потому что я хотел быть переносимым, если я собираю код под консолью, он переносим на другие ПК и Windows XP и его маленький, чтобы быть переносимым exe, скомпилированным с тем, что я должен выбрать эту опцию, но размер больше это то, что я не могу понять. Как я могу сделать тот же размер, используя ide и быть переносимым, как тот, который собран под консолью. Извините, что не включил это в мой вопрос.
  • 0
    Инкрементное связывание также включено по умолчанию? Я думаю, это может добавить немного, но не слишком много (+ 10К ???)
Показать ещё 4 комментария

Ещё вопросы

Сообщество Overcoder
Наверх
Меню