165 votes

Comment puis-je savoir quels sont tous les symboles exportés par un objet partagé ?

J'ai un objet partagé (dll). Comment puis-je savoir quels sont les symboles qui en sont exportés ?

0 votes

1 votes

Tous les symboles de l'objet sont exportés - même les fonctions "internes". Il suffit de les déclarer au compilateur pour qu'ils soient prêts pour l'éditeur de liens. Ceci est généralement fait avec un fichier d'en-tête, comme le dit Ryan Fox ci-dessous.

10 votes

Chris Lutz se trompe : tous les symboles ne sont pas exportés depuis les fichiers d'objets relocalisables, et encore moins depuis les bibliothèques partagées.

269voto

Employed Russian Points 50479

Avez-vous un "objet partagé" (généralement une bibliothèque partagée sur AIX), une bibliothèque partagée UNIX ou une DLL Windows ? Ce sont toutes des choses différentes, et votre question les confond toutes :-(

  • Pour un objet partagé AIX, utilisez dump -Tv /path/to/foo.o .
  • Pour une bibliothèque partagée ELF, utilisez readelf -Ws /path/to/libfoo.so ou (si vous avez GNU nm) nm -D /path/to/libfoo.so .
  • Pour une bibliothèque partagée UNIX non-ELF, veuillez indiquer dont UNIX qui vous intéresse.
  • Pour une DLL Windows, utilisez dumpbin /EXPORTS foo.dll .

9 votes

Dans GNU/Linux, il n'existe pas d'utilitaire "dumpbin". Et la question est étiquetée comme suit : linux.

3 votes

Très utile, il est bon d'avoir une telle vue d'ensemble. nm fonctionne également sous MacOSX, sauf que le -D option. Ou brew install binutils et utiliser la version GNU via gnm . Pour GNU nm , --demangle est également utile. Voir aussi gobjdump .

0 votes

En fait, vous pouvez très bien travailler à la fois avec des bibliothèques partagées, des dlls et des fichiers objets à partir d'un seul utilitaire, voir cette réponse .

29voto

smcameron Points 1864

Objdump est un autre bon outil sous linux.

0 votes

Egalement disponible sur AIX

1 votes

Comme cela a été joliment expliqué dans ce Réponse SO on l'utiliserait comme ça... objdump -TC /path/to/libfoo.so .

13voto

AllDayCpp Points 58

Sous *nix, vérifiez nm. Sous Windows, utilisez le programme Dépendance Walker

4 votes

Plus précisément, nm --defined-only -g something.so imprimera les symboles qui sont à la fois définis dans la bibliothèque et les symboles externes, ce qui est probablement ce que le PO veut.

9voto

VolkerK Points 54118

Voir homme nm

GNU nm liste les symboles des fichiers d'objets objfile..... Si aucun fichier objet n'est indiqué comme argument, nm prend en compte le fichier a.out.

8 votes

Btw : pour les objets partagés vous avez besoin de l'option -D/--dynamique. e.g. nm -D libmagic.so

9voto

codebin Points 33

Utilisez : nm --demangle <libname>.so

3 votes

nm: /usr/lib/i386-linux-gnu/libtemplates_parser.so.11.6: no symbols . readelf o -D le drapeau fonctionne.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X