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

$ 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可以解决问题。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top