GNU/Linux >> Tutoriales Linux >  >> Linux

Nombre de símbolo extraño en la salida del comando nm

Eso es debido a la manipulación de nombres de C++

nm -C

los deshace.

Para evitar la manipulación de nombres,

  • use un compilador de C (gcc, no g++), nombre su archivo fuente .c (no .cpp)
  • o declarar "C" externa:

.

mi.h

  extern "C" 
  {
        void start();
        void finish();
  }

Esto les dará enlace "C", lo que significa que no se pueden sobrecargar, no se pueden pasar por referencia, nada c++ :)


Suena como una manipulación de nombres de C++.


Como han mencionado otras respuestas, es probable que esto se deba a la manipulación del nombre de C++. Si desea que se pueda acceder al símbolo por su nombre 'desenmarañado' y está implementado en C++, deberá extern "C" para decirle al compilador de C++ que tiene un enlace C.

En el encabezado que tiene la función prototipo, querrá algo como:

#if defined(__cplusplus)
extern "C" {
#endif

// the prototype for start()...


#if defined(__cplusplus)
}
#endif

Esto asegurará que si la función es utilizada por un compilador de C++, obtendrá el extern "C" en la declaración, y que si es usado por un módulo C, no será confundido por el extern "C" especificador.

Su implementación en el archivo .cpp no ​​necesita esas cosas si incluye el encabezado antes de la definición de la función. Utilizará la especificación de vinculación que vio en la declaración anterior. Sin embargo, prefiero seguir decorando la definición de función con extern "C" solo para asegurarse de que todo esté sincronizado (tenga en cuenta que en el archivo .cpp no ​​necesita el #ifdef cosas de preprocesamiento:siempre se compilará como C++.


Linux
  1. ¿Convertir la salida del comando Tree a formato Json?

  2. ¿Salida del comando "último"?

  3. Salida de qué comando utilizado para la entrada a Cd?

  4. Ejemplos de comandos de tiempo de Linux

  5. Ejemplos de comandos tee en Linux

Ccat – Colorear la salida del comando Cat

Comando iftop en Linux

Comando lsblk en Linux

Ejemplos de comandos echo de Linux

Convertir una salida a cadena

¿Qué significa el símbolo de la tubería de Linux? ¿hacer?