Maison >développement back-end >C++ >Pourquoi la liaison d'un programme C autonome avec gcc entraîne-t-elle une référence non définie à `__gxx_personality_v0` ?

Pourquoi la liaison d'un programme C autonome avec gcc entraîne-t-elle une référence non définie à `__gxx_personality_v0` ?

Linda Hamilton
Linda Hamiltonoriginal
2024-11-20 14:17:131064parcourir

Why does linking a free-standing C   program with gcc result in an undefined reference to `__gxx_personality_v0`?

Lors de la compilation et de la liaison d'un programme C autonome à l'aide de gcc, une erreur d'éditeur de liens peut se produire en raison d'une référence non définie à __gxx_personality_v0. Pour comprendre l'objectif de ce symbole, explorons son rôle dans le contexte du message d'erreur que vous avez fourni.

Quel est le rôle de __gxx_personality_v0 ?

Le symbole __gxx_personality_v0 est utilisé dans les tables de déroulement de la pile, qui sont visibles dans la sortie d'assemblage du déroulement de la pile. Selon l'ABI Itanium C, on l'appelle la routine de personnalité.

En l'absence d'exceptions, définir ce symbole comme un pointeur de vide NULL global "fonctionnera" car aucune exception n'est levée. Cependant, tenter de lever une exception entraînera un comportement inattendu.

Solutions alternatives :

  • Désactivez les exceptions à l'aide de -fno-exceptions.
  • Si RTTI n'est pas non plus utilisé, ajoutez -fno-rtti.
  • Pour les programmes utilisant des exceptions, compilez avec g au lieu de gcc, qui inclut automatiquement la bibliothèque nécessaire (-lstdc ).

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn