Ich möchte die exportierten Funktionen einer gemeinsam genutzten Bibliothek unter Linux anzeigen.
Mit welchem Befehl kann ich das tun?
(Unter Windows benutze ich das Programm abhängig)
Ich möchte die exportierten Funktionen einer gemeinsam genutzten Bibliothek unter Linux anzeigen.
Mit welchem Befehl kann ich das tun?
(Unter Windows benutze ich das Programm abhängig)
Antworten:
Was Sie brauchen, ist nm
und seine -D
Option:
$ nm -D /usr/lib/libopenal.so.1
.
.
.
00012ea0 T alcSetThreadContext
000140f0 T alcSuspendContext
U atanf
U calloc
.
.
.
Exportierte Sumbole sind mit a gekennzeichnet T
. Erforderliche Symbole, die von anderen freigegebenen Objekten geladen werden müssen, haben a U
. Beachten Sie, dass die Symboltabelle nicht nur Funktionen enthält, sondern auch exportierte Variablen.
Weitere Informationen finden Sie auf der nm
Handbuchseite .
nm
ohne -D
Flag verwenden.
objdump -T *.so
kann auch den Job machen
Auf einem MAC müssen Sie verwenden nm *.o | c++filt
, da es in keine -C
Option gibt nm
.
Neben anderen bereits erwähnten Werkzeugen können Sie auch readelf
( manuell ) verwenden. Es ist ähnlich, objdump
geht aber detaillierter. Siehe dies für die Erklärung der Unterschiede.
$ readelf -sW /lib/liblzma.so.5 |head -n10
Symbol table '.dynsym' contains 128 entries:
Num: Value Size Type Bind Vis Ndx Name
0: 00000000 0 NOTYPE LOCAL DEFAULT UND
1: 00000000 0 FUNC GLOBAL DEFAULT UND pthread_mutex_unlock@GLIBC_2.0 (4)
2: 00000000 0 FUNC GLOBAL DEFAULT UND pthread_mutex_destroy@GLIBC_2.0 (4)
3: 00000000 0 NOTYPE WEAK DEFAULT UND _ITM_deregisterTMCloneTable
4: 00000000 0 FUNC GLOBAL DEFAULT UND memmove@GLIBC_2.0 (5)
5: 00000000 0 FUNC GLOBAL DEFAULT UND free@GLIBC_2.0 (5)
6: 00000000 0 FUNC GLOBAL DEFAULT UND memcpy@GLIBC_2.0 (5)