Как уменьшить размер исполняемого файла, созданного компилятором 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}" в свои аргументы компилятора, и он будет оптимизирован для скорости или размера. Проверьте документы для своего компилятора.
Вы также можете включить отладочные символы. Снятие их также уменьшит.