Symbole indéfini GXX personnalité V0 sur le lien

J'ai obtenu ce symbole indéfini avec cette ligne de commande:

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

Test.cpp est simple et devrait bien construire. Quel est le problème?

46
demandé sur ryan_s 2008-10-15 06:36:38

4 réponses

Utiliser

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++

L'exécution de md5 par rapport au a.out produit dans chaque scénario montre que c'est la même sortie.

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

75
répondu ryan_s 2014-07-04 00:53:20

L'extension .cpp provoque gcc pour compiler votre fichier en tant que Fichier c++. (Voir les documents GCC .)

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

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 langue, vous remarquerez que ___gxx_personality_v0 n'est pas répertorié comme un 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, le symbole ___gxx_personality_v0 est présent.)

4
répondu garageàtrois 2014-12-17 21:44:40

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

3
répondu inket 2010-12-02 22:08:38

Avait 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 .m de fichier. Renommer le .m fichier à. mm Correction du problème.

1
répondu BadPirate 2013-08-29 18:38:22