¿Cómo puedo ver los símbolos en un archivo .o? nm no me funciona. Yo uso g ++ / linux.
fuente
¿Cómo puedo ver los símbolos en un archivo .o? nm no me funciona. Yo uso g ++ / linux.
En lugar de nm
, puedes usar el poderoso objdump
. Consulte la página del manual para obtener más detalles. Prueba objdump -t myfile
o objdump -T myfile
. Con la -C
bandera también puede exigir nombres de C ++, como nm
hace.
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
o objdump
.
Por ejemplo, si ha utilizado XXX-YYY-gcc
para compilar el archivo .o, debe utilizar XXX-YYY-nm
o XXX-YYY-objdump
procesar los archivos.
Solo corre: nm you_obj_file.o | c++filt
Hay un comando para ver qué funciones están incluidas en un archivo de objeto, biblioteca o ejecutable:
nm
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 usa nm
:
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);
}
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.