web-dev-qa-db-fra.com

Comment afficher les symboles dans les fichiers objets?

Comment afficher les symboles dans un fichier .o? nm ne fonctionne pas pour moi. J'utilise g ++/linux.

71
nakiya

Au lieu de nm, vous pouvez utiliser le puissant objdump. Voir la page de manuel pour plus de détails. Essayez objdump -t myfile ou objdump -T myfile. Avec le -C flag vous pouvez également démêler les noms C++, comme le fait nm.

85
DarkDust

Avez-vous utilisé un compilateur croisé pour une autre plate-forme? Si tel est le cas, vous devez utiliser la commande nm ou objdump respective.

Par exemple, si vous avez utilisé XXX-YYY-gcc pour compiler le fichier .o, vous devez utiliser XXX-YYY-nm ou XXX-YYY-objdump pour traiter les fichiers.

12
Schedler

Exécutez simplement: nm you_obj_file.o | c++filt

5
Jee lee

Il existe une commande pour voir quelles fonctions sont incluses dans un fichier objet ou une bibliothèque ou un exécutable:

nm
5
Alok Save

Vous pouvez utiliser nm -C .o/lib/exe, par exemple:

xiongyu@ubuntu:~/tmp/build$ nm -C libfile1.a 

file1.cpp.o:
0000000000000000 T f()
0000000000000000 W int fun<int>(int)

en utilisant nm -C ce sera plus lisible, si vous utilisez simplement nm:

xiongyu@ubuntu:~/tmp/build$ nm libfile1.a 

file1.cpp.o:
0000000000000000 T _Z1fv
0000000000000000 W _Z3funIiET_S0_

comme nous le voyons, ce n'est pas si lisible.

Voici ce que mon file1.cpp comme:

xiongyu@ubuntu:~/tmp/build$ vi ../file1.cpp 
#include "head.h"
void f()  {
     int i = fun<int>(42);
}
1
Jayhello