2010-11-14 3 views
25

Я хотел бы удалить как можно больше - на Linux: ELF. Я хочу только там, где мне нужно запустить его.Как полностью стирать исполняемые файлы

Я попытался с помощью strip:

strip --strip-all elf 

Но не похоже, чтобы сделать хорошую работу: nm все еще показывает много вещей, и бинарная еще большим.

Что мне делать?

+1

Как вы его построили? –

+0

Я понимаю, что этот вопрос был задан давно. Я предполагаю, что вы построили его как динамически связанный двоичный файл. Вы можете получить более удовлетворительные результаты, если вы создадите статически связанный файл ELF, а затем разделите его. – 2014-07-20 10:24:10

ответ

28

Если все остальное не удается, вы можете прочитать документацию, начиная с man strip.

Серьезно, может быть, ваше приложение имеет много символов и кода. С одной стороны, наибольшее уменьшение размера будет rm elf, но тогда ваша программа больше не будет работать. Все зависит от вашей программы и того, что вы закодировали в ней.

В качестве конкретного примера я недавно работал с большой библиотекой C++, где strip без дополнительных аргументов уменьшил размер от 400 до +25 мб до 28 мб. Но тогда вы больше не могли ссылаться на него (в контексте других разделяемых библиотек), делая его несколько бесполезным.

Но при использовании strip --strip-unneeded он изменил размер от 400+ мб до 55 мб, что по-прежнему значительным, но позволило получить доступ к библиотеке из других разделяемых библиотек.

Одним словом, я бы доверял strip. Возможно, ваше приложение не может быть уменьшено без изменений кода.

12

С помощью опции -R вы можете удалить все разделы, которые вам не нужны. Также посмотрите на this относительно минимальных исполняемых файлов ELF.

0
strip -R .comment 
gcc -Os elf.c 

Эти двое могут помочь.

7

Я бы рассмотрел эту замечательную статью, в которой углубляется вопрос о том, как сделать минимально возможный исполняемый файл ELF. Возможно, у него есть информация, которая может помочь!

http://www.muppetlabs.com/~breadbox/software/tiny/teensy.html