web-dev-qa-db-fra.com

Symbole non défini ___gxx_personality_v0 sur le lien

J'ai obtenu ce bâtiment de symbole non défini avec cette ligne de commande:

$ gcc test.cpp
Undefined symbols:
  "___gxx_personality_v0", referenced from:
  etc...

test.cpp est simple et devrait bien fonctionner. Quelle est l'affaire?

50
ryan_s

Utilisation

g++ test.cpp

à la place, puisque c'est du code c ++.


Ou, si vous vraiment voulez utiliser gcc, ajoutez -lstdc++ à la ligne de commande, comme ceci:

gcc test.cpp -lstdc++

Fonctionnement md5 contre la a.out produit dans chaque scénario montre que c'est la même sortie.

Mais ouais, g++ rend probablement votre monde plus simple.

77
ryan_s

Le .cpp l'extension oblige gcc à compiler votre fichier en tant que fichier C++. (Voir les GCC docs .)

Essayez de compiler le même fichier, mais renommez-le pour avoir un .c extension:

mv test.cpp
gcc test.c

Vous pouvez également spécifier explicitement la langue en passant -x c au compilateur:

gcc -x c -c test.cpp -o test.o

Si vous exécutez nm test.o sur ces versions en langage C, vous remarquerez que ___gxx_personality_v0 n'est pas répertorié comme symbole.
(Et si vous exécutez la même commande sur un fichier objet généré avec gcc -c test.cpp -o test.o, les ___gxx_personality_v0 le symbole est présent.)

4
garageàtrois

Juste au cas où quelqu'un aurait le même problème que moi: l'extension du fichier devrait être un .c pas un .C (gcc est sensible à la casse).

3
inket

Eu le même problème, mais une solution différente:

Le code C++ dans la bibliothèque statique est lié et référencé par un fichier .m. Renommer le fichier .m en .mm a résolu le problème.

1
BadPirate