libstdc++.so.6:添加符号时出错:命令行中缺少 DSO



我已经开始在 Ubuntu 上学习C++。我也只有几个月的时间使用Linux。

我正在尝试将 2D 球碰撞脚本从 Javascript 移植到 C++ 以用于学习目的。

我正在使用simple2D进行绘图C++:https://github.com/simple2d/simple2d

我去运行这个命令:

simple2d build c-code-test.cpp

我收到此回复:

cc1plus: warning: command line option ‘-std=c11’ is valid for C/ObjC but not for C++
/usr/bin/ld: /tmp/ccl07DBG.o: undefined reference to symbol '_ZNSt8ios_base4InitD1Ev@@GLIBCXX_3.4'
//usr/lib/x86_64-linux-gnu/libstdc++.so.6: error adding symbols: DSO missing from command line
collect2: error: ld returned 1 exit status

由于我对 Linux 和C++的新鲜感,我无法根据之前关于堆栈溢出的问题做出正确的推论来解决这个问题。我已经安装了libstdc++6,所以我会正确链接。

有人可以引导我完成步骤 1、2、3 ...请?谢谢你!

您看到的错误似乎是由于试图将C++编译为C。 命令行选项是选择 C11 标准,该标准适用于 C,而不是 C++。 缺少符号是因为C++库未链接,当将程序链接为 C 时也会发生这种情况。

我没有使用simple2d,但我在这里的猜测是他们编写的编译脚本不支持C++或者您需要C++使用某些选项。 如果我们看一下文档:

simple2d 构建命令是编译 单个源文件。当然,你也可以直接使用编译器, 例如在类Unix系统上:

cc triangle.c 'simple2d --libs' -o triangle

你为什么不尝试像他们的例子那样直接调用编译器。 但是您需要使用g++而不是cc。 像这样:g++ c-code-test.cpp `simple2d --libs` -o c-code-test

这是 simple2d 脚本的一个错误。

他们基本上对C++使用了错误的构建命令。

您可以通过修补我链接到的修复程序或使用 TrentP 显示的手动构建步骤来解决此问题。

或者等待 v1.1.0 之后的下一个版本。

最新更新