Jak mogę wyświetlić symbole w pliku .o? nm nie działa dla mnie. Używam g ++ / linux.
c++
linux
g++
object-files
nakiya
źródło
źródło
nm: Lib1.o: File format not recognized
file Lib1.o
i powiedz nam, jakie jest wyjście.file Lib1.o
” w swojej powłoce.file
Wywołane narzędzie podaje typ pliku Lib1.o, tzn. Czy jest to naprawdę plik obiektowy. Wątpię.Odpowiedzi:
Zamiast tego
nm
możesz użyć potężnegoobjdump
. Zobacz stronę podręcznika po szczegóły. Spróbujobjdump -t myfile
lubobjdump -T myfile
. Za pomocą tej-C
flagi możesz także rozróżniać nazwy C ++, tak jaknm
robi.źródło
objdump: Lib1.o: File format not recognized
objdump -t Lib1.o
Czy korzystałeś z cross-kompilatora dla innej platformy? Jeśli tak, musisz użyć odpowiedniego
nm
lubobjdump
.Na przykład, jeśli
XXX-YYY-gcc
skompilowałeś plik .o, musisz użyćXXX-YYY-nm
lubXXX-YYY-objdump
przetworzyć te pliki.źródło
Po prostu biegnij:
nm you_obj_file.o | c++filt
źródło
Istnieje polecenie, aby sprawdzić, które funkcje są zawarte w pliku obiektowym, bibliotece lub pliku wykonywalnym:
źródło
nm
.Możesz użyć
nm -C .o/lib/exe
np .:xiongyu@ubuntu:~/tmp/build$ nm -C libfile1.a file1.cpp.o: 0000000000000000 T f() 0000000000000000 W int fun<int>(int)
używanie
nm -C
go będzie bardziej czytelne , jeśli użyjesz tylkonm
:xiongyu@ubuntu:~/tmp/build$ nm libfile1.a file1.cpp.o: 0000000000000000 T _Z1fv 0000000000000000 W _Z3funIiET_S0_
jak widzimy, nie jest tak czytelny.
Poniżej przedstawiam to, co mi się
file1.cpp
podoba:xiongyu@ubuntu:~/tmp/build$ vi ../file1.cpp #include "head.h" void f() { int i = fun<int>(42); }
źródło