Nicht definierte Symbol ___gxx_personality_v0 auf Link
Frage
Ich habe dieses undefiniertes Symbol wurde immer mit dieser Befehlszeile Aufbau:
$ gcc test.cpp
Undefined symbols:
"___gxx_personality_v0", referenced from:
etc...
test.cpp ist einfach und sollte bauen in Ordnung. Was ist das Problem?
Lösung
Mit
g++ test.cpp
statt, da dies c ++ Code.
Oder, wenn Sie wirklich will gcc
verwenden, fügen Sie -lstdc++
an die Befehlszeile, etwa so:
gcc test.cpp -lstdc++
Beim Laufen md5
gegen den a.out
unter jedem Szenario erzeugt zeigt, dass es die gleiche Leistung ist.
Aber, ja, macht g++
wahrscheinlich die Welt einen einfacheren Ort.
Andere Tipps
Die .cpp
Erweiterung verursacht gcc
Ihre Datei als C ++ Datei zu kompilieren. (Siehe GCC docs .)
Versuchen Sie, die gleiche Datei zu kompilieren, aber benennen sie eine .c
Erweiterung zu haben:
mv test.cpp
gcc test.c
Alternativ können Sie explizit die Sprache angeben, indem -x c
an den Compiler übergeben:
gcc -x c -c test.cpp -o test.o
Wenn Sie nm test.o
auf diesen C-Sprachversionen laufen, werden Sie feststellen, dass ___gxx_personality_v0
nicht als Symbol aufgeführt ist.
(Und wenn Sie den gleichen Befehl auf einer Objektdatei erzeugt mit gcc -c test.cpp -o test.o
laufen, das ___gxx_personality_v0
Symbol vorhanden ist.)
Für den Fall, jemand hat das gleiche Problem wie ich. Die Dateierweiterung ein .c
kein .C
sein sollte (gcc ist case-sensitive)
Hat das gleiche Problem, aber eine andere Lösung:
C ++ Code in statischer Bibliothek verknüpft zu werden, und durch eine .m-Datei verwiesen wird. die .m-Datei umbenennen das Problem behoben .MM.