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?

War es hilfreich?

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.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top