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.