удаление ненужного кода во время компиляции - PullRequest
1 голос
/ 25 августа 2011

Я использую библиотеку CImg для написания плагинов для созданного мной программного обеспечения для редактирования изображений.Проблема в том, что когда я включаю CImg, размер плагинов увеличивается от 200 КБ до 2 МБ!Но в данном конкретном случае я использую только 5% кода CImg!

Так что мой вопрос: есть ли способ удалить ненужный код во время компиляции, чтобы конечный исполняемый файл не был раздутым?

(Я использую Qt 4.8.0 и последние CImg, Qt Creator и MacOS Lion).

Флаги компиляции / ссылки: QMAKE_CXXFLAGS + = -Os -fdata-section -ffunction-section LIBS + = -Wl --gc сечения

Ответы [ 3 ]

2 голосов
/ 25 августа 2011

Убедитесь, что вы компилируете с полной оптимизацией (или просто -Os, которая является оптимизацией по размеру) и удаляете символы отладки с strip -s.Это может занять много места.

Также может случиться так, что в то время как you использует только 5% кода CImg, 5%, которые вы используете, используют остальные 95% для внутреннего использования.,Самое лучшее, что вы можете сделать, это оптимизировать и убрать символы отладки.

1 голос
/ 20 декабря 2011

Согласно документации gcc , gcc может удалять неиспользуемые нестатические функции с помощью удаления мертвого кода , когда опция -flto сочетается с -fuse-linker-plugin или -fwhole- опция программы.

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

0 голосов
/ 25 августа 2011

Первый и самый очевидный: вы удалили отладочную информацию? Попробуйте команду

strip -s <program>

Также может помочь компиляция с -Os.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...