链接上的未定义符号___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修复了问题。