链接上未定义的符号___gxx_personality_v0

Undefined Symbol ___gxx_personality_v0 on link

本文关键字:gxx v0 personality 符号 未定义 链接      更新时间:2023-10-16

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

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

test.cpp很简单,应该构建得很好。怎么回事?

使用

g++ test.cpp

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


或者,如果真的想要使用gcc,那么将-lstdc++添加到命令行中,如下所示:

gcc test.cpp -lstdc++

对每个场景下生成的a.out运行md5可以表明它是相同的输出。

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

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

尝试编译相同的文件,但将其重命名为具有.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符号。)

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

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

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