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