Wie kann ich Symbole in einer .o-Datei anzeigen? nm funktioniert bei mir nicht. Ich benutze g ++ / linux.
c++
linux
g++
object-files
Nakiya
quelle
quelle
nm: Lib1.o: File format not recognized
file Lib1.o
und sagen Sie uns, was die Ausgabe ist.file Lib1.o
" in deine Shell eingeben . Das aufgerufene Toolfile
teilt Ihnen den Dateityp von Lib1.o mit, dh ob es sich wirklich um eine Objektdatei handelt. Das bezweifle ich.Antworten:
Stattdessen
nm
können Sie die mächtigen verwendenobjdump
. Weitere Informationen finden Sie in der Manpage. Versuchen Sie esobjdump -t myfile
oderobjdump -T myfile
. Mit dem-C
Flag können Sie auch C ++ - Namen entwirren, wie dies dernm
Fall ist.quelle
objdump: Lib1.o: File format not recognized
objdump -t Lib1.o
Haben Sie einen Cross-Compiler für eine andere Plattform verwendet? In diesem Fall müssen Sie den entsprechenden Befehl
nm
oderobjdump
Befehl verwenden.Wenn Sie beispielsweise
XXX-YYY-gcc
die .o-Datei kompiliert haben , müssen Sie die Dateien verwendenXXX-YYY-nm
oderXXX-YYY-objdump
verarbeiten.quelle
Renn einfach:
nm you_obj_file.o | c++filt
quelle
Es gibt einen Befehl, um zu überprüfen, welche Funktionen in einer Objektdatei, Bibliothek oder ausführbaren Datei enthalten sind:
quelle
nm
.Sie können
nm -C .o/lib/exe
zum Beispiel verwenden:xiongyu@ubuntu:~/tmp/build$ nm -C libfile1.a file1.cpp.o: 0000000000000000 T f() 0000000000000000 W int fun<int>(int)
Die Verwendung
nm -C
ist besser lesbar , wenn Sie nur Folgendes verwendennm
:xiongyu@ubuntu:~/tmp/build$ nm libfile1.a file1.cpp.o: 0000000000000000 T _Z1fv 0000000000000000 W _Z3funIiET_S0_
wie wir sehen ist es nicht so lesbar.
Unten ist was mir
file1.cpp
gefällt:xiongyu@ubuntu:~/tmp/build$ vi ../file1.cpp #include "head.h" void f() { int i = fun<int>(42); }
quelle