Wie würden Sie die zur Verfügung stehenden Funktionen Liste usw. innerhalb einer kompilierten Bibliothek enthalten?
Frage
Wie kann ich feststellen, ob eine Funktion in einer Bibliothek vorhanden ist, oder eine Liste der Funktionen in einer kompilierten Bibliothek?
Lösung
Sie können über den nm Befehl, um die Symbole in der statischen zur Liste Bibliotheken.
nm -g -C <libMylib.a>
Andere Tipps
Für ELF-Binaries, können Sie readelf:
readelf -sW a.out | awk '$4 == "FUNC"' | c++filt
-s
: Liste Symbole
-W
: nicht zu lange Namen schneiden
Der awk Befehl wird dann alle Funktionen herauszufiltern, und c ++ filt wird sie unmangle. Das bedeutet, dass es sie von einer internen Namensschema konvertiert, so dass sie in für Menschen lesbaren Form angezeigt werden. Es gibt Namen ähnlich wie diese (aus Boost.Filesystem lib genommen):
285: 0000bef0 91 FUNC WEAK DEFAULT 11 boost::exception::~exception()
Ohne c ++ filt wird der Name als _ZN5boost9exceptionD0Ev
angezeigt
Für Microsoft-Tools "link /dump /symbols <filename>
" gibt Ihnen die blutigen Details. Es gibt wahrscheinlich andere Möglichkeiten (oder Optionen) ein leichter macht zu lesen auflistet.
Unter Linux / Unix können Sie objdump -T
verwenden, um die exportierten Symbole in einem bestimmten Objekt enthalten aufzulisten. Unter Windows gibt es dumpbin
(IIRC dumpbin /exports
). Beachten Sie, dass C ++ Funktionsnamen verstümmelt werden, um Überlastungen zu ermöglichen.
EDIT: nach codelogic der anwser ich das objdump erinnerte auch versteht -C de-Mangeln auszuführen.
Mit diesem Befehl:
objdump -t "your-Bibliothek"
Es wird mehr Druck als Sie wollen - nicht nur Funktionsnamen, sondern die gesamte Symboltabelle. Überprüfen Sie die verschiedenen Attribute der Symbole, die Sie erhalten, und Sie werden in der Lage, die Funktionen von Variablen und Sachen zu sortieren.