Как удалить неиспользуемые символы C / C ++ с помощью GCC и ld?

Мне нужно сильно оптимизировать размер моего исполняемого файла (разработка ARM ) и Я заметил, что в моей текущей схеме сборки ( gcc + ld ) неиспользуемые символы не удаляются.

Использование полосы arm-strip --strip-ненужно для результирующих исполняемых файлов / библиотек не меняет выходной размер исполняемого файла (я понятия не имею, почему, возможно, просто не может) .

Каким будет путь (если он существует) , чтобы изменить мой конвейер сборки, чтобы неиспользуемые символы были удалены из результирующего файла?


Я бы даже не подумал об этом, но моя текущая встроенная среда не очень "мощная" " и сохранение даже 500K из 2M приводит к очень хорошему увеличению производительности загрузки.

Обновление:

К сожалению, текущая версия gcc , которую я использую, не работает » t имеют параметр -dead-strip и -ffunction-section ... + --gc-section для ld не дает существенной разницы для результирующего вывода.

Я шокирован тем, что это даже стало проблемой, потому что я был уверен, что gcc + ld должен автоматически удалять неиспользуемые символы (зачем им вообще их сохранять?).

107
задан Ciro Santilli 新疆改造中心法轮功六四事件 11 November 2015 в 09:42
поделиться