¿Cómo puedo ver los símbolos en un archivo .o? nm no me funciona. Yo uso g ++ / linux.
c++
linux
g++
object-files
nakiya
fuente
fuente
nm: Lib1.o: File format not recognized
file Lib1.o
y decirnos cuál es la salida.file Lib1.o
" en su shell. La herramienta llamadafile
le dice el tipo de archivo de Lib1.o, es decir, si realmente es un archivo de objeto. Lo dudo.Respuestas:
En lugar de
nm
, puedes usar el poderosoobjdump
. Consulte la página del manual para obtener más detalles. Pruebaobjdump -t myfile
oobjdump -T myfile
. Con la-C
bandera también puede exigir nombres de C ++, comonm
hace.fuente
objdump: Lib1.o: File format not recognized
objdump -t Lib1.o
¿Ha estado utilizando un compilador cruzado para otra plataforma? Si es así, debe utilizar el comando respectivo
nm
oobjdump
.Por ejemplo, si ha utilizado
XXX-YYY-gcc
para compilar el archivo .o, debe utilizarXXX-YYY-nm
oXXX-YYY-objdump
procesar los archivos.fuente
Solo corre:
nm you_obj_file.o | c++filt
fuente
Hay un comando para ver qué funciones están incluidas en un archivo de objeto, biblioteca o ejecutable:
fuente
nm
.Puede utilizar
nm -C .o/lib/exe
, por ejemplo:xiongyu@ubuntu:~/tmp/build$ nm -C libfile1.a file1.cpp.o: 0000000000000000 T f() 0000000000000000 W int fun<int>(int)
usarlo
nm -C
será más legible , si solo usanm
:xiongyu@ubuntu:~/tmp/build$ nm libfile1.a file1.cpp.o: 0000000000000000 T _Z1fv 0000000000000000 W _Z3funIiET_S0_
como vemos, no es tan legible.
A continuación se muestra lo que me
file1.cpp
gusta:xiongyu@ubuntu:~/tmp/build$ vi ../file1.cpp #include "head.h" void f() { int i = fun<int>(42); }
fuente