¿Cómo ver símbolos en archivos de objetos?


81

¿Cómo puedo ver los símbolos en un archivo .o? nm no me funciona. Yo uso g ++ / linux.


5
nm es exactamente lo que usaría. ¿Puedes explicar por qué no te funciona?
nos

1
Dice:nm: Lib1.o: File format not recognized
nakiya

4
@nakiya: Ejecutar file Lib1.oy decirnos cuál es la salida.
DarkDust

4
@nakiya No puede ejecutar un archivo .o. Y si compila un archivo de encabezado, produce encabezados precompilados con versiones recientes de gcc, no archivos de objeto. Debe compilar archivos .cpp, no archivos de encabezado.
nos

1
@nakiya: No puede ejecutarlo, realmente debería escribir el texto " file Lib1.o" en su shell. La herramienta llamada filele dice el tipo de archivo de Lib1.o, es decir, si realmente es un archivo de objeto. Lo dudo.
DarkDust

Respuestas:


100

En lugar de nm, puedes usar el poderoso objdump. Consulte la página del manual para obtener más detalles. Prueba objdump -t myfileo objdump -T myfile. Con la -Cbandera también puede exigir nombres de C ++, como nmhace.


1
Probé ObjDump también. Mismo resultado:objdump: Lib1.o: File format not recognized
nakiya

2
tryobjdump -t Lib1.o
mustafa

13

¿Ha estado utilizando un compilador cruzado para otra plataforma? Si es así, debe utilizar el comando respectivo nmo objdump.

Por ejemplo, si ha utilizado XXX-YYY-gccpara compilar el archivo .o, debe utilizar XXX-YYY-nmo XXX-YYY-objdumpprocesar los archivos.



4

Hay un comando para ver qué funciones están incluidas en un archivo de objeto, biblioteca o ejecutable:

nm

4
El OP declaró directamente que no puede usar nm.
ivan_pozdeev

2

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 -Cserá 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.cppgusta:

xiongyu@ubuntu:~/tmp/build$ vi ../file1.cpp 
#include "head.h"
void f()  {
     int i = fun<int>(42);
}
Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.