Comment qualifieriez-vous la liste des fonctions disponibles etc contenues dans une bibliothèque compilée?
Question
Comment déterminer si une fonction existe dans une bibliothèque ou une liste des fonctions dans une bibliothèque compilée?
La solution
Vous pouvez utiliser la commande nm pour lister les symboles statiques bibliothèques.
nm -g -C <libMylib.a>
Autres conseils
Pour les binaires ELF, vous pouvez utiliser readelf:
readelf -sW a.out | awk '$4 == "FUNC"' | c++filt
-s
: symboles de la liste
-W
: ne coupez pas les noms trop longs
La commande awk alors filtrer toutes les fonctions, et c ++ filt leur unmangle. Cela signifie qu'il va les convertir à partir d'un schéma de nommage interne afin d'être affichées sous forme lisible par l'homme. Il émet des noms similaires à ce (tiré de boost.filesystem lib):
285: 0000bef0 91 FUNC WEAK DEFAULT 11 boost::exception::~exception()
Sans c ++ filt, le nom est affiché comme _ZN5boost9exceptionD0Ev
Pour les outils Microsoft, « link /dump /symbols <filename>
» vous donnera les détails sordides. Il y a probablement d'autres moyens (ou options) pour donner une plus facile à lire la liste.
Sous Linux / Unix, vous pouvez utiliser objdump -T
à la liste des symboles exportés contenus dans un objet donné. Sous Windows, il y a dumpbin
(IIRC dumpbin /exports
). Notez que les noms de fonctions C ++ sont mutilées afin de permettre les surcharges.
EDIT: après avoir vu de codelogic anwser je me suis souvenu que objdump comprend aussi C pour effectuer de-mutiler.
utilisez cette commande:
objdump -t "votre bibliothèque"
Il imprimera plus que vous voulez - ne fonctionne pas seulement des noms, mais l'ensemble de la table des symboles. Vérifiez les différents attributs des symboles que vous obtenez, et vous serez en mesure de régler les fonctions à partir de variables et d'autres choses.