我正在尝试编译gobby,但由于出现以下错误而停止编译:
/usr/lib64/gcc/x86_64-slackware-linux/4.9.3/../../../../lib64/libglibmm-2.4.so: undefined reference to `std::out_of_range::out_of_range(char const*)@GLIBCXX_3.4.21'
/usr/lib64/gcc/x86_64-slackware-linux/4.9.3/../../../../lib64/libglibmm-2.4.so: undefined reference to `std::underflow_error::underflow_error(char const*)@GLIBCXX_3.4.21'
/usr/lib64/gcc/x86_64-slackware-linux/4.9.3/../../../../lib64/libglibmm-2.4.so: undefined reference to `std::overflow_error::overflow_error(char const*)@GLIBCXX_3.4.21'第一个反应是检查link命令。它是这样结束的:
... -lgsasl -lgnutls -lgtkmm-3.0 -latkmm-1.6 -lgdkmm-3.0 -lgiomm-2.4 -lpangomm-1.4 **-lglibmm-2.4** -lcairomm-1.0 -lsigc-2.0 -lgtksourceview-3.0 -lgtk-3 -lgdk-3 -lpangocairo-1.0 -lpango-1.0 -latk-1.0 -lcairo-gobject -lcairo -lgdk_pixbuf-2.0 -lgio-2.0 -lgobject-2.0 -lglib-2.0 -linfgtk-0.7 -linftextgtk-0.7 -linftext-0.7 -linfinity-0.7 -lxml2 -lgnutls -lgsasl -lgtk-3 -lgdk-3 -lpangocairo-1.0 -lpango-1.0 -latk-1.0 -lcairo-gobject -lcairo -lgdk_pixbuf-2.0 -lgio-2.0 -lgobject-2.0 -lglib-2.0(我用**标记了-lglibmm-2.4库。我怀疑这就是应该定义标识符的地方。为了确保我运行:
$ objdump -TC libglibmm-2.4.so.1.3.0 | grep out_of_range
0000000000000000 DF *UND* 0000000000000000 GLIBCXX_3.4.21 std::out_of_range::out_of_range(char const*)
0000000000000000 DF *UND* 0000000000000000 GLIBCXX_3.4 std::out_of_range::~out_of_range()
0000000000000000 DF *UND* 0000000000000000 GLIBCXX_3.4.20 std::__throw_out_of_range_fmt(char const*, ...)
0000000000000000 DO *UND* 0000000000000000 GLIBCXX_3.4 typeinfo for std::out_of_range
$ objdump -TC libglibmm-2.4.so.1.3.0 | grep overflow_error
0000000000000000 DF *UND* 0000000000000000 GLIBCXX_3.4.21 std::overflow_error::overflow_error(char const*)
0000000000000000 DF *UND* 0000000000000000 GLIBCXX_3.4 std::overflow_error::~overflow_error()
0000000000000000 DO *UND* 0000000000000000 GLIBCXX_3.4 typeinfo for std::overflow_error因此,它们似乎在.so文件中没有定义。那么应该在哪里定义它们呢?
发布于 2017-08-24 21:43:04
好吧,我解决了编译问题,但这又产生了另一个问题:
19 Aug 23 21:39 libstdc++.so -> libstdc++.so.6.0.20
18 Sep 3 2016 libstdc++.so.5 -> libstdc++.so.5.0.7
4515618 Jun 5 2013 libstdc++.so.5.0.7
19 Sep 3 2016 libstdc++.so.6 -> libstdc++.so.6.0.21
966848 Jul 30 2012 libstdc++.so.6.0.17
1003520 Aug 19 2015 libstdc++.so.6.0.20
1533144 Mar 7 2016 libstdc++.so.6.0.21不久前我更新了to libstdc++之后,版本从6.0.20增加到了6.0.21,即使手动调用了ldconfig,libstdc++.so仍然指向6.0.20版本。将此链接手动更改为6.0.21解决了问题。
我的印象是ldconfig应该处理好这件事。手册页和搜索都没有显示ldconfig遵循的确切算法...我说错了吗?
https://stackoverflow.com/questions/45851199
复制相似问题