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++
可能会让你的世界变得更简单。

使用

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测试。O<代码>,<代码> > XGXXMULALITYOV0符号。)< /P> < P> >代码>。CPP < /Cord>扩展导致<代码> GCC < /C> >将您的文件编译为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
而不是
.c
(gcc区分大小写)。

遇到了相同的问题,但解决方案不同:


静态库中的C++代码被链接,并被.m文件引用。将.m文件重命名为.mm修复了此问题。

也有相同的问题,但解决方案不同:


静态库中的C++代码被链接,并被.m文件引用。将.m文件重命名为.mm修复了此问题。

I认为gcc是识别cpp文件并将其传递给正确编译器的前端。@Pax Diablo:是的,它使用正确的编译器,但是,g++将libstdc++传递给链接器,而gcc没有:-首先,这是一个链接器问题,不是编译问题。我通常不会像这样从命令行生成单独的文件,所以我甚至没有想到,只是键入了gcc,以为它会工作。我自己也犯过同样的错误,至少有两次我能记住。:-)这不一定是疲倦或沉默。我看到很多人回答使用g++而不是gcc,但这是一个糟糕的答案。询问和搜索的人可能没有这种选择。我正在使用C和C++版本的库,我正在编写C程序。链接到其中一些库使我不得不链接到stdc++,我甚至不得不用-L指定在/usr/lib/gcc中找到它的位置。我认为gcc是识别cpp文件并将其传递给正确编译器的前端。@Pax Diablo:是的,它使用了正确的编译器,g++将libstdc++传递给链接器,而gcc不:-首先,这是一个链接器问题,不是编译问题。我通常不会像这样从命令行生成单独的文件,所以我甚至没有想到,只是键入了gcc,以为它会工作。我自己也犯过同样的错误,至少有两次我能记住。:-)这不一定是疲倦或沉默。我看到很多人回答使用g++而不是gcc,但这是一个糟糕的答案。询问和搜索的人可能没有这种选择。我正在使用C和C++版本的库,我正在编写C程序。链接到其中一些库使我不得不链接到stdc++,我甚至不得不用-L指定在/usr/lib/gcc中找到它的位置。例如,在CMake中也是如此。这是因为.C文件由cpp识别。例如,在CMake中也是如此。