C++ 链接上未定义的符号\uuuuuuugxx\u个性\uv0
我用这个命令行得到了这个未定义的符号构建:C++ 链接上未定义的符号\uuuuuuugxx\u个性\uv0,c++,c,gcc,g++,C++,C,Gcc,G++,我用这个命令行得到了这个未定义的符号构建: $ 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,表明
$ 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++< /> >可能会使你的世界变得更简单。 < p> <代码> .CPP扩展导致<>代码> GCC < /代码>将你的文件编译成C++文件。(见附件。) 尝试编译同一文件,但将其重命名为具有
.c
扩展名:
mv test.cpp
gcc test.c
或者,您可以通过向编译器传递-xc
来明确指定语言:
gcc -x c -c test.cpp -o test.o
如果在这些C语言版本上运行
nm test.o
,您会注意到\uuuuuuugxx\u personality\u v0
未作为符号列出。(如果在使用
gcc-c test.cpp-o test.o生成的对象文件上运行相同的命令,则会出现\uuuuuuugxx\u personality\u v0
符号。)以防任何人与我有相同的问题:文件扩展名应该是.c
而不是.c
(gcc区分大小写)。也有相同的问题,但另一种解决方案是:
静态库中的C++代码被链接,并被.m文件引用。将.m文件重命名为.mm修复了此问题。I认为gcc是识别cpp文件并将其传递给正确编译器的前端。@Pax Diablo:是的,它使用正确的编译器,但是,g++将libstdc++传递给链接器,而gcc没有:-首先,这是一个链接器问题,不是编译问题。我通常不会像这样从命令行生成单独的文件,所以我甚至没有想到,只是键入了gcc,以为它会工作。我自己也犯过同样的错误,至少有两次我能记住。:-)这不一定是疲倦或沉默。我看到很多人回答使用g++而不是gcc,但这是一个糟糕的答案。询问和搜索的人可能没有这种选择。我正在使用C和C++版本的库,我正在编写C程序。链接到其中一些库使我不得不链接到stdc++,我甚至不得不用-L指定在/usr/lib/gcc中找到它的位置。例如,在CMake中也是如此。