Как уменьшить размер исполняемого файла, создаваемого компилятором MinGW g ++? - PullRequest
17 голосов
/ 02 ноября 2011

У меня есть тривиальная программа C ++ «Hello world», которая компилируется в исполняемый файл размером 500 КБ, выполняемый компилятором MinGW g ++ под Win XP.Некоторые говорят, что это вызвано библиотекой iostream и статической связью libstdc ++. Dll .

Использование опции компоновщика -s немного помогло (уменьшение50%), но я был бы удовлетворен только <10kB исполняемым файлом.Есть ли способ, как добиться этого с помощью компилятора MinGW?Переносимость не является большой проблемой для меня. </p>

Можно ли скопировать libstdc ++. Dll с исполняемым файлом, используя динамическое связывание?Если да, то как этого добиться?


Решено: Я использовал MinGW 3.4.Теперь я обновился до последней версии MinGW 4.6, а размер был уменьшен на 90% до 50 КБ, с опцией -s даже до 9 КБ, что вполне достаточно.В любом случае - спасибо всем за помощь.Вот мои результаты

C ++ Программа Hello World с использованием iostream

MinGW | no options | -s option
------------------------------
3.4   | 500kB      | 286 kB
4.6   | 50kB       |   9 kB

Ответы [ 4 ]

12 голосов
/ 02 ноября 2011

Флаги для использования:

  • -s как вы делали для удаления символов
  • -lstdc++_s для указания динамического связывания с libstdc++.dll
  • -Os для оптимизации бинарного файла по размеру.

По умолчанию mingw статические ссылки на libstdc++.a в Windows.

Обратите внимание, что флаг lstdc++_s есть только в MinGW с GCC> 4.4, я считаю.

5 голосов
/ 02 ноября 2011

Дайте strip и UPX попробовать.

2 голосов
/ 02 ноября 2011

Использование флага -Os может помочь. Это оптимизирует по размеру.

0 голосов
/ 02 ноября 2011

Вы должны использовать -O для оптимизации. Добавьте «-O {level}» к аргументам компилятора, и он будет оптимизирован для скорости или размера. Проверьте документы для вашего компилятора.

Вы также можете включить символы отладки. Удаление их также сделает его меньше.

...