Das Standardwerkzeug für die Auflistung von Symbolen ist nm
können Sie es einfach so verwenden:
nm -gD yourLib.so
Wenn Sie die Symbole einer C++-Bibliothek sehen wollen, fügen Sie die Option "-C" hinzu, die die Symbole entmangelt (entmangelt ist es viel besser lesbar).
nm -gDC yourLib.so
Wenn Ihre .so-Datei im elf-Format vorliegt, haben Sie zwei Möglichkeiten:
Entweder objdump
( -C
ist auch für die Entflechtung von C++ nützlich):
$ objdump -TC libz.so
libz.so: file format elf64-x86-64
DYNAMIC SYMBOL TABLE:
0000000000002010 l d .init 0000000000000000 .init
0000000000000000 DF *UND* 0000000000000000 GLIBC_2.2.5 free
0000000000000000 DF *UND* 0000000000000000 GLIBC_2.2.5 __errno_location
0000000000000000 w D *UND* 0000000000000000 _ITM_deregisterTMCloneTable
Oder verwenden Sie readelf
:
$ readelf -Ws libz.so
Symbol table '.dynsym' contains 112 entries:
Num: Value Size Type Bind Vis Ndx Name
0: 0000000000000000 0 NOTYPE LOCAL DEFAULT UND
1: 0000000000002010 0 SECTION LOCAL DEFAULT 10
2: 0000000000000000 0 FUNC GLOBAL DEFAULT UND free@GLIBC_2.2.5 (14)
3: 0000000000000000 0 FUNC GLOBAL DEFAULT UND __errno_location@GLIBC_2.2.5 (14)
4: 0000000000000000 0 NOTYPE WEAK DEFAULT UND _ITM_deregisterTMCloneTable
0 Stimmen
Die Plattform macht einen Unterschied. Apple bietet einen GCC 4.0, aber seine
nm
reagiert nicht auf einige Optionen, wie-D
y-g
(IIRC).0 Stimmen
Unter Mac OS wird nichts gedruckt.
5 Stimmen
@jww denn das ist BSD
nm
, nicht GNUnm
.