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?
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.
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.)
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).
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.