Comment imprimer une liste de symboles exportés à partir d'une bibliothèque dynamique

121

J'ai donc essayé de faire fonctionner des bibliothèques dynamiques dans mon projet XCode sous Mac OS X. Jusqu'à présent, aucune joie.

Je suis capable de charger le fichier dylib, mais quand j'appelle dlsym pour obtenir le pointeur de fonction, il renvoie 0 et dlerror indique que le symbole est introuvable.

Je me demande donc s'il existe un moyen simple de lister les symboles exportés à partir d'un fichier dylib. Toutes les idées seraient géniales.

Gérald
la source

Réponses:

152

homme 1 nm

https://web.archive.org/web/20160316222941/https://developer.apple.com/library/mac/documentation/Darwin/Reference/ManPages/man1/nm.1.html

Par exemple:

nm -gU /usr/local/Cellar/cairo/1.12.16/lib/cairo/libcairo-trace.0.dylib
MK.
la source
2
Sous OS X Leopard (10.5, ouais, je sais ...) vous devriez utiliser nm -gu, c'est à dire que l' -uoption est en minuscules.
Laryx Decidua
4
man 1 nm est autonome et continuera de fonctionner lorsque la ligne de commande change: p
MK.
9
@MK. man 1 nmliste de nombreuses choses que l'on peut faire avec nm. Encore une fois, c'est une ressource externe que l'on peut lire pour découvrir une solution, mais pas une solution elle-même au «moyen simple de lister les symboles exportés depuis un fichier dylib» . « nm -gU ….dylib» Est, cependant.
Slipp D.Thompson
59

Utilisez otool :

otool -TV your.dylib

OU

nm -g your.dylib
linuxbuild
la source
4
Sur le nouveau macOS, otool -T affichera otool: -T functionality obsoleteuse objdump -t
joseph.smeng
Bien qu'il soit vrai que les otool -Trapports functionality obsoletedans le plus récent OS X, il est également vrai que (pour les bibliothèques dynamiques) objdump -trapporteraThe file was not recognized as a valid object file.
TML
14

Utilisation nm -a your.dylib

Il imprimera tous les symboles, y compris les globaux

Omkar Ramtekkar
la source
0

Utilisez Mach-OView pour afficher tous les symboles dans dylib

https://sourceforge.net/projects/machoview/

Sahil Doshi
la source
J'étais ravi d'avoir appris cette interface graphique, mais elle s'est plantée pour moi après avoir chargé un dylib. J'utilise macOS Mojave.
chrisdembia