Прийнята відповідь дуже хороша, але лише для доповнення ваших подальших запитань (а також як довідкова інформація для тих, хто опинився тут).
Що еквівалентно 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