Comment qualifieriez-vous la liste des fonctions disponibles etc contenues dans une bibliothèque compilée?

StackOverflow https://stackoverflow.com/questions/392142

  •  23-08-2019
  •  | 
  •  

Question

Comment déterminer si une fonction existe dans une bibliothèque ou une liste des fonctions dans une bibliothèque compilée?

Était-ce utile?

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.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top