链接上的未定义符号___gxx_personality_v0

我已经得到这个未定义的符号build设与这个命令行:

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

test.cpp很简单,应该build立好。 什么是交易?

使用

 g++ test.cpp 

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


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

 gcc test.cpp -lstdc++ 

针对每种情况下生成的a.out运行md5显示它是相同的输出。

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

以防万一和我有同样的问题:文件扩展名应该是.c不是.C (gcc区分大小写)。

.cpp扩展.cpp导致gcc将您的文件编译为C ++文件。 (请参阅GCC文档 。)

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

 mv test.cpp gcc test.c 

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

 gcc -xc -c test.cpp -o test.o 

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

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

静态库中的C ++代码正在链接,并被.m文件引用。 将.m文件重命名为.mm修复了问题。