GNU/Linux >> Tutoriels Linux >  >> Linux

Nom de symbole étrange dans la sortie de la commande nm

C'est à cause de la manipulation des noms C++

nm -C

les démêle.

Pour éviter la manipulation de noms,

  • utilisez un compilateur C (gcc, pas g++), nommez votre fichier source .c (pas .cpp)
  • ou déclarer extern "C":

.

mon.h

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

Cela leur donnera un lien "C", ce qui signifie qu'ils ne peuvent pas être surchargés, ne peuvent pas passer par référence, rien de c++ :)


Cela ressemble à une manipulation de noms C++.


Comme d'autres réponses l'ont mentionné, cela est probablement dû à la manipulation des noms C++. Si vous voulez que le symbole soit accessible par son nom "non mutilé", et qu'il est implémenté en C++, vous aurez besoin de nous extern "C" pour dire au compilateur C++ qu'il a une liaison C.

Dans l'en-tête contenant le prototype de la fonction, vous voudrez quelque chose comme :

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

// the prototype for start()...


#if defined(__cplusplus)
}
#endif

Cela garantira que si la fonction est utilisée par un compilateur C++, elle obtiendra le extern "C" sur la déclaration, et que s'il est utilisé par un module C, il ne sera pas confondu par le extern "C" spécificateur.

Votre implémentation dans le fichier .cpp n'a pas besoin de cela si vous incluez l'en-tête avant la définition de la fonction. Il utilisera la spécification de liaison qu'il a vue dans la déclaration précédente. Cependant, je préfère toujours décorer la définition de la fonction avec extern "C" juste pour s'assurer que tout est synchronisé (notez que dans le fichier .cpp vous n'avez pas besoin du #ifdef les éléments de prétraitement - ils seront toujours compilés en C++.


Linux
  1. Stockage de la sortie de la commande dans la variable Shell ?

  2. Convertir la sortie de la commande Tree au format Json ?

  3. Sortie de quelle commande utilisée pour l'entrée sur CD ?

  4. tee Exemples de commandes sous Linux

  5. Affichage de la sortie complète de la commande PS

Ccat - Coloriser la sortie de la commande Cat

Commande iftop sous Linux

Commande lsblk sous Linux

Exemples de commandes echo Linux

10 exemples pratiques de commandes Linux nm

Interface de ligne de commande C++