我已经得到使用此命令行这种不确定的标志性建筑:未定义的符号___gxx_personality_v0链路
$ gcc test.cpp
Undefined symbols:
"___gxx_personality_v0", referenced from:
etc...
TEST.CPP简单,应该建立罚款。这笔交易是什么?
我已经得到使用此命令行这种不确定的标志性建筑:未定义的符号___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++
运行md5
针对每个场景下产生的a.out
表明,它是相同的输出。
但是,是的,g++
可能会让你的世界变得更简单。
虽然gcc是识别cpp文件的前端,并将其传递给正确的编译器。 – paxdiablo 2008-10-15 02:41:38
@Pax暗黑破坏神:是的,它使用了正确的_compiler_,但是,g ++将libstdC++传递给链接器,而gcc则没有。 :-P – 2008-10-15 02:43:24
.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修复了问题。
如果不是太长,我们可以查看代码吗? – jjnguy 2008-10-15 02:38:30