2010-11-14 12 views
25

Ich möchte so viel wie möglich abstreifen - auf Linux: ein ELF. Ich will nur das Zeug haben, das ich brauche.So entfernen Sie ausführbare Dateien gründlich

Ich versuchte strip mit:

strip --strip-all elf 

Aber es scheint nicht, einen guten Job zu tun: nm zeigt noch viele Sachen, und das binäre ist immer noch groß.

Was soll ich tun?

+1

Wie haben Sie es gebaut, um damit zu beginnen? –

+0

Ich stelle fest, dass diese Frage schon vor langer Zeit gestellt wurde. Ich gehe davon aus, dass Sie es als dynamisch verknüpfte Binärdatei erstellt haben. Sie können zufriedenstellendere Ergebnisse erzielen, wenn Sie eine statisch verknüpfte ELF-Datei erstellen und sie dann entfernen. –

Antwort

28

Wenn alles andere fehlschlägt, können Sie die Dokumentation lesen, beginnend mit man strip.

Im Ernst, vielleicht hat Ihre Anwendung eine Menge Symbole und Code. Im Extremfall wäre die größte Größenreduktion rm elf, aber dann wird Ihr Programm nicht mehr ausgeführt. Es hängt alles von Ihr Programm und was Sie in es codiert haben.

Als ein konkretes Beispiel habe ich vor kurzem mit einer großen C++ - Bibliothek gearbeitet, wo strip ohne weitere Argumente die Größe von 400 + mb auf etwa 28 mb reduziert. Aber dann konnte man nicht mehr (im Kontext mit anderen gemeinsam genutzten Bibliotheken) dagegen verlinken, was es etwas nutzlos machte.

Aber wenn strip --strip-unneeded verwendet wurde, änderte es die Größe von 400 + MB auf 55 MB, was immer noch beträchtlich ist, erlaubte jedoch den Zugriff auf die Bibliothek von anderen gemeinsam genutzten Bibliotheken.

Kurz gesagt, ich würde strip vertrauen. Vielleicht kann Ihre Anwendung ohne Codeänderungen nicht weiter reduziert werden.

12

Mit der Option -R zum Entfernen können Sie alle Bereiche entfernen, die Sie nicht benötigen. Sehen Sie sich auch in Bezug auf minimale ELF-Executables an.

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

Diese beiden könnten helfen.