链接上的未定义符号___gxx_personality_v0
题
我用这个命令行得到了这个未定义的符号:
$ 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可以解决问题。
不隶属于 StackOverflow