Принятый ответ очень хорош, но только для того, чтобы дополнить ваши дальнейшие вопросы (а также как справку для всех, кто здесь окажется).
Что эквивалентно gcc -s в плане strip с некоторыми из его опций?
Они оба делают одно и то же, полностью удаляя таблицу символов. Однако, как указал @JimLewis, полоса обеспечивает более точное управление. Например, в перемещаемом объекте strip --strip-unneeded
не удалит его глобальные символы. Однако strip
или strip --strip-all
удалили бы полную таблицу символов.
Какой из них вы используете для уменьшения размера исполняемого файла и ускорения его запуска
Таблица символов - это неразмещаемый раздел двоичного файла. Это означает, что он никогда не загружается в оперативную память. Он хранит информацию, которая может быть полезна для отладки целей, например, для распечатки трассировки стека в случае сбоя. Случай, в котором может иметь смысл удалить таблицу символов, будет сценарием, в котором у вас есть серьезные ограничения емкости хранилища (в этом отношении gcc -Os -s
или make CXXFLAGS="-Os -s" ...
полезно, так как это приведет к меньшему, более медленному двоичному файлу, который также раздели, чтобы уменьшить размер дальше). Я не думаю, что удаление таблицы символов приведет к увеличению скорости по причинам, прокомментированным.
Наконец, я рекомендую эту ссылку для удаления общих объектов: http://www.technovelty.org/linux/stripping-shared-libraries.html