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

2 minutos de lectura

avatar de usuario
nakiya

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

  • nm es exactamente lo que usarías. ¿Puedes explicar cómo no te funciona?

    – nos

    7 oct 2010 a las 10:57


  • Dice : nm: Lib1.o: File format not recognized

    – nakiya

    7 oct 2010 a las 10:59

  • @nakiya: Corre file Lib1.o y díganos cuál es la salida.

    – Polvo oscuro

    7 de octubre de 2010 a las 11:03

  • @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 objetos. Debe compilar archivos .cpp, no archivos de encabezado.

    – nos

    7 oct 2010 a las 11:09


  • @nakiya: No puedes ejecutarlo, realmente deberías escribir el texto “file Lib1.o” en su caparazón. La herramienta llamada file le dice el tipo de archivo de Lib1.o, es decir, si realmente es un archivo de objeto. Lo dudo.

    – Polvo oscuro

    7 oct 2010 a las 11:10


En vez de nmpuedes usar el poderoso objdump. Vea la página man para más detalles. Probar objdump -t myfile o objdump -T myfile. Con el -C flag también puede desmantelar los nombres de C++, como nm lo hace.

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

    – nakiya

    7 oct 2010 a las 11:07

  • probar objdump -t Lib1.o

    – mustafá

    23 de abril de 2014 a las 8:50

¿Has estado usando un compilador cruzado para otra plataforma? Si es así, debe utilizar el respectivo nm o objdump comando

Por ejemplo, si ha utilizado XXX-YYY-gcc para compilar el archivo .o, necesita usar XXX-YYY-nm o XXX-YYY-objdump para procesar los archivos.

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

nm

  • El OP declaró directamente que no puede usar nm.

    – ivan_pozdeev

    13/03/2016 a las 21:31

  • @ivan_pozdeev Si bien eso es cierto, imagino que algunas personas (al menos yo) llegan a esta pregunta simplemente buscando cómo ver símbolos en archivos de objetos, y en mi caso nm funcionó perfectamente para mis necesidades, por lo que creo que esta es una buena respuesta dadas las circunstancias.

    – Nuevo byte

    26 ene a las 15:45

Solo corre: nm you_obj_file.o | c++filt

Puedes usar nm -C .o/lib/exepor ejemplo:

[email protected]:~/tmp/build$ nm -C libfile1.a 

file1.cpp.o:
0000000000000000 T f()
0000000000000000 W int fun<int>(int)

usando nm -C será más legiblesi solo usas nm:

[email protected]:~/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 mi file1.cpp me gusta:

[email protected]:~/tmp/build$ vi ../file1.cpp 
#include "head.h"
void f()  {
     int i = fun<int>(42);
}

¿Ha sido útil esta solución?

Esta web utiliza cookies propias y de terceros para su correcto funcionamiento y para fines analíticos y para mostrarte publicidad relacionada con sus preferencias en base a un perfil elaborado a partir de tus hábitos de navegación. Al hacer clic en el botón Aceptar, acepta el uso de estas tecnologías y el procesamiento de tus datos para estos propósitos. Configurar y más información
Privacidad