【发布时间】:2010-09-17 05:48:23
【问题描述】:
我一直在用这个命令行构建这个未定义的符号:
$ gcc test.cpp
Undefined symbols:
"___gxx_personality_v0", referenced from:
etc...
test.cpp 很简单,应该可以正常构建。什么交易?
【问题讨论】:
我一直在用这个命令行构建这个未定义的符号:
$ 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 docs。)
尝试编译相同的文件,但将其重命名为具有.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 可解决此问题。
【讨论】: