链接上未定义的符号___gxx_personality_v0
Undefined Symbol ___gxx_personality_v0 on link
我已经用这个命令行得到了这个未定义的符号构建:
$ 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解决了此问题。