Как удалить неиспользуемые символы C / C ++ с помощью GCC и ld? - PullRequest
100 голосов
/ 14 июля 2011

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

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

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


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

Обновление:

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

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

Ответы [ 11 ]

0 голосов
/ 24 ноября 2015

Вы можете использовать бинарный файл в объектном файле (например, исполняемый файл), чтобы удалить из него все символы.

Примечание: он сам изменяет файл и не создает копию.

...