gcc static libstdc ++用于重新分发库

时间:2015-02-17 15:28:01

标签: c++11 gcc static-libraries static-linking

我使用Aldebaran的Gentoo(2.1.2.17)版本的OpenNao遇到了问题。 它使用gcc-4.5.3并拒绝通过 emerge 升级到更新的GCC版本。 但是,ROS和我们的框架都依赖于C ++ 11,并且具有C ++ 0x无法涵盖的功能。

我已经成功下载,构建并安装在主目录gcc-4.8.4中,并构建了我们的库,但是,当我没有与libstdc ++静态链接时,我得到了通常的错误:

libstdc++.so.6: version `GLIBCXX_3.4.15' not found (required by...)

当我使用g ++标志时: -static-libstdc ++ 我可以通过 readelf -d 验证使用我们库的二进制文件不再需要libstdc ++。所以我在我们的图书馆中静态链接了。

这是标准/定义的行为吗? 这实际上是冻结我们的库(最好是静态和共享)到gcc-4.8.4的最佳方法,直到Aldebaran决定它将支持C ++ 11?

[编辑]

构建的共享库,读取:

Dynamic section at offset 0x224bf8 contains 27 entries:
  Tag        Type                         Name/Value
 0x00000001 (NEEDED)                     Shared library: [libboost_system.so.1.55.0]
 0x00000001 (NEEDED)                     Shared library: [libstdc++.so.6]
 0x00000001 (NEEDED)                     Shared library: [libm.so.6]
 0x00000001 (NEEDED)                     Shared library: [libgcc_s.so.1]
 0x00000001 (NEEDED)                     Shared library: [libc.so.6]
 0x00000001 (NEEDED)                     Shared library: [ld-linux.so.2]
 0x0000000e (SONAME)                     Library soname: [librapp.0.1.so]

而static-libstdc ++共享库读取:

Dynamic section at offset 0x2eb790 contains 26 entries:
  Tag        Type                         Name/Value
 0x00000001 (NEEDED)                     Shared library: [libboost_system.so.1.55.0]
 0x00000001 (NEEDED)                     Shared library: [libm.so.6]
 0x00000001 (NEEDED)                     Shared library: [libgcc_s.so.1]
 0x00000001 (NEEDED)                     Shared library: [libc.so.6]
 0x00000001 (NEEDED)                     Shared library: [ld-linux.so.2]
 0x0000000e (SONAME)                     Library soname: [librapp.0.1.so]

所以,对我来说,找不到与GLIBCXX_3.4.15相关的问题,与libstdc ++。so.6有关,我猜测它与gcc-4.8.4一起发布,并且与libstdc ++附带的版本/ ABI不同OpenNao / GCC-4.5.3 事实上,将二进制文件与我们的库链接时的错误与std :: placeholders有关。

0 个答案:

没有答案