strip aus den GNU Binutils entfernt Symbole und Debug-Informationen aus Objektdateien, ausführbaren Programmen und Archiven. Das verkleinert Binärdateien deutlich — in Produktivsystemen und Containern ist gestrippter Code der Standard, während Entwickler-Builds die Debug-Symbole behalten.
Grundaufrufe
strip programm # alle Symbole entfernen (Datei wird direkt verändert)
strip --strip-debug prog # nur Debug-Informationen entfernen
strip --strip-unneeded o # nur für die Relokation unnötige Symbole entfernen
strip -o prog.klein prog # Ausgabe in eine neue Datei schreiben
strip --strip-all lib.a # alle Mitglieder eines Archivs strippen
Wichtige Optionen
-s/--strip-all— alle Symbole entfernen;-g/-S/-d/--strip-debug— nur Debug-Informationen--strip-unneeded— entfernt nur Symbole, die für die Relokation nicht gebraucht werden (schonender für Bibliotheken)-K name/--keep-symbol— bestimmte Symbole behalten;-N name/--strip-symbol— gezielt entfernen-o datei— Ergebnis in eine separate Datei schreiben statt die Eingabe zu verändern--only-keep-debug— nur die Debug-Sektionen behalten (Gegenstück für die zweiteilige Debug-Lösung)
Zweiteilige Debug-Info (mit objcopy)
Wer die Debug-Informationen nicht ganz verlieren will, nutzt die klassische Kombination: objcopy --only-keep-debug programm programm.dbg legt eine Datei nur mit Debug-Daten an, strip --strip-debug programm entfernt sie aus dem Programm und objcopy --add-gnu-debuglink=programm.dbg programm trägt den Verweis ein. Der Debugger findet die Symbole dann über den Debuglink — ausführlich erklärt bei den objcopy-Befehlen.
Praxis-Tipps
- Distributions-Pakete strippen Binärdateien standardmäßig und liefern Debug-Symbole als separate Pakete
- Vor dem Strippen ein Backup behalten: Ohne Symbole sind Stack-Traces nur noch Adressen (es sei denn, man löst sie per addr2line-Befehle mit einer .dbg-Datei auf)
strip libfoo.astrippt alle Mitglieder des Archivs — nachherranliblaufen lassen, damit der Index aktuell bleibt (siehe ranlib-Befehle)- Größenvergleich:
size programmzeigt vorher/nachher, wie viel Platz die Symbole kosteten (siehe size-Befehle)
Verwandte Grundlagen: objcopy-Befehle (Debuglink), ar-Befehle (Archive), Symboltabelle.