链接上的未定义符号___gxx_personality_v0

时间:2008-10-15 02:36:38

标签: c++ c gcc g++

我用这个命令行得到了这个未定义的符号:

$ gcc test.cpp
Undefined symbols:
  "___gxx_personality_v0", referenced from:
  etc...

test.cpp很简单,应该可以正常构建。这笔交易是什么?

4 个答案:

答案 0 :(得分:77)

使用

g++ test.cpp

相反,因为这是c ++代码。


或者,如果确实想要使用gcc,请在命令行中添加-lstdc++,如下所示:

gcc test.cpp -lstdc++

针对每个方案下生成的md5运行a.out,表明它的输出相同。

但是,是的,g++可能会让你的世界变得更加简单。

答案 1 :(得分:4)

.cpp扩展名导致gcc将您的文件编译为C ++文件。 (参见GCC docs。)

尝试编译同一个文件,但将其重命名为.c扩展名:

mv test.cpp
gcc test.c

或者,您可以通过将-x c传递给编译器来显式指定语言:

gcc -x c -c test.cpp -o test.o

如果您对这些C语言版本运行nm test.o,则会注意到___gxx_personality_v0未列为符号。
(如果对使用gcc -c test.cpp -o test.o生成的目标文件运行相同的命令,则会出现___gxx_personality_v0符号。)

答案 2 :(得分:3)

万一有人遇到与我相同的问题:文件扩展名应为.c而不是.C(gcc区分大小写)。

答案 3 :(得分:1)

有同样的问题,但有不同的解决方案:

静态库中的C ++代码被链接,并被.m文件引用。将.m文件重命名为.mm可以解决问题。