Как уменьшить размер исполняемого файла, созданного компилятором MinGW g++?

У меня есть тривиальная программа "Hello world" на С++, которая скомпилирована в исполняемый файл MinKW g++ для 500kB под Win XP. Некоторые говорят, что это вызвано библиотекой iostream и статической ссылкой libstdС++. Dll.

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

Можно ли скопировать libstdС++. dll с исполняемым файлом с помощью динамической компоновки? Если да, то как это сделать?


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

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

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

Ответы

Ответ 1

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

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

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

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

Ответ 2

Дайте strip и UPX a попробуйте.

Ответ 3

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

Ответ 4

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

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