85 votes

Comment afficher les symboles dans les fichiers objets ?

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

108voto

DarkDust Points 47584

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 , vous pouvez également démanteler les noms C++, comme le fait nm .

15voto

Schedler Points 827

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

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.

5voto

Jee lee Points 481

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

5voto

Alok Save Points 115848

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

 nm

2voto

Jayhello Points 703

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 juste nm :

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

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

comme on le voit, ce n'est pas si lisible.

Voici ce que mes file1.cpp aiment :

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

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