Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/129.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 链接上未定义的符号\uuuuuuugxx\u个性\uv0_C++_C_Gcc_G++ - Fatal编程技术网

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中也是如此。