Je souhaite afficher les fonctions exportées d'une bibliothèque partagée sous Linux.
Quelle commande me permet de faire cela?
(Sous Windows, j'utilise le programme dépend)
Je souhaite afficher les fonctions exportées d'une bibliothèque partagée sous Linux.
Quelle commande me permet de faire cela?
(Sous Windows, j'utilise le programme dépend)
Réponses:
Ce dont vous avez besoin est nm
et son -D
option:
$ nm -D /usr/lib/libopenal.so.1
.
.
.
00012ea0 T alcSetThreadContext
000140f0 T alcSuspendContext
U atanf
U calloc
.
.
.
Les sumbols exportés sont indiqués par un T
. Les symboles requis qui doivent être chargés à partir d'autres objets partagés ont unU
. Notez que la table des symboles n'inclut pas uniquement des fonctions, mais également des variables exportées.
Consultez la nm
page de manuel pour plus d'informations.
nm
sans le -D
drapeau.
objdump -T *.so
peut aussi faire le travail
Sur un MAC, vous devez utiliser nm *.o | c++filt
, car il n'y a pas d' -C
option dans nm
.
Parmi les autres outils déjà mentionnés, vous pouvez également utiliser readelf
( manuel ). Il est similaire à objdump
mais va plus dans les détails. Voir ceci pour l'explication de la différence.
$ 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)