Die akzeptierte Antwort ist sehr gut, aber nur als Ergänzung zu Ihren weiteren Fragen (und auch als Referenz für alle, die hier landen).
Was ist das Äquivalent zu gcc -s in Bezug auf Streifen mit einigen seiner Optionen?
Beide machen dasselbe und entfernen die Symboltabelle vollständig. Wie @JimLewis hervorhob, ermöglicht der Streifen jedoch eine feinere Kontrolle. Beispielsweise werden in einem verschiebbaren Objekt strip --strip-unneeded
die globalen Symbole nicht entfernt. Jedoch strip
oder strip --strip-all
würde die vollständige Symboltabelle entfernen.
Welches verwenden Sie, um die Größe der ausführbaren Datei zu reduzieren und deren Ausführung zu beschleunigen?
Die Symboltabelle ist ein nicht zuweisbarer Abschnitt der Binärdatei. Dies bedeutet, dass es nie in den RAM-Speicher geladen wird. Es speichert Informationen, die zum Debuggen von Zwecken nützlich sein können, z. B. um einen Stacktrace auszudrucken, wenn ein Absturz auftritt. Ein Fall, in dem es sinnvoll sein könnte, die Symboltabelle zu entfernen, ist ein Szenario, in dem die Speicherkapazität stark eingeschränkt ist (in dieser Hinsicht gcc -Os -s
oder make CXXFLAGS="-Os -s" ...
nützlich, da dies zu einer kleineren, langsameren Binärdatei führt, die ebenfalls entfernt wird, um die Größe weiter zu verringern). . Ich glaube nicht, dass das Entfernen der Symboltabelle aus den genannten Gründen zu einem Geschwindigkeitsgewinn führen würde.
Zuletzt empfehle ich diesen Link zum Entfernen von freigegebenen Objekten: http://www.technovelty.org/linux/stripping-shared-libraries.html