首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >g++和glibmm的链接问题

g++和glibmm的链接问题
EN

Stack Overflow用户
提问于 2017-08-24 08:34:02
回答 1查看 369关注 0票数 0

我正在尝试编译gobby,但由于出现以下错误而停止编译:

代码语言:javascript
复制
/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命令。它是这样结束的:

代码语言:javascript
复制
... -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库。我怀疑这就是应该定义标识符的地方。为了确保我运行:

代码语言:javascript
复制
$ 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文件中没有定义。那么应该在哪里定义它们呢?

EN

回答 1

Stack Overflow用户

发布于 2017-08-24 21:43:04

好吧,我解决了编译问题,但这又产生了另一个问题:

代码语言:javascript
复制
     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,即使手动调用了ldconfiglibstdc++.so仍然指向6.0.20版本。将此链接手动更改为6.0.21解决了问题。

我的印象是ldconfig应该处理好这件事。手册页和搜索都没有显示ldconfig遵循的确切算法...我说错了吗?

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/45851199

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档