【问题标题】:Project uses older version of boost library项目使用旧版本的 boost 库
【发布时间】:2017-06-11 10:49:10
【问题描述】:

我正在使用 arch 并且最近更新了我的系统。从那以后,我无法使用Point Cloud Library 链接项目。我在链接期间收到此错误消息:

[100%] Linking CXX executable cloud_viewer
/usr/bin/ld: warning: libboost_system.so.1.63.0, needed by /usr/lib/gcc/x86_64-pc-linux-gnu/7.1.1/../../../../lib/libpcl_common.so, not found (try using -rpath or -rpath-link)
/usr/bin/ld: warning: libboost_thread.so.1.63.0, needed by /usr/lib/gcc/x86_64-pc-linux-gnu/7.1.1/../../../../lib/libpcl_common.so, not found (try using -rpath or -rpath-link)
/usr/bin/ld: warning: libboost_iostreams.so.1.63.0, needed by /usr/lib/gcc/x86_64-pc-linux-gnu/7.1.1/../../../../lib/libpcl_io.so, not found (try using -rpath or -rpath-link)

我尝试创建符号链接libboost_xxxxx.so.1.63.0 -> libboost_xxxxx.so.1.64.0

但是,虽然现在链接工作正常,但在执行过程中程序崩溃了。 我应该尝试安装旧的boot library 还是有更好的解决方案?

【问题讨论】:

  • 你应该安装旧的库,肯定的。
  • 另一种选择是假设您当前使用的任何内容都没有被贬低,并使用 1.64.0 重新编译源代码。如果您遇到一些编译器错误,请更新受影响的源并希望获得最好的结果。如果他们是我的消息来源,我会这样做。如果您正在编译其他人的源代码,那么我会选择只安装旧版本。
  • 您是否在更新前的某个时间点编译了点云库?

标签: c++ boost linker shared-libraries


【解决方案1】:

有两种方法可以解决这个问题:

  1. 针对当前的 Boost 重新编译 PCL,希望它仍然有效(几率相对较高)

  2. 在您当前的系统版本旁边安装旧版本的 boost。我不确定如何确切地防止创建一般(未版本化的)符号链接(您可能不需要做任何特别的事情)。保留另一个版本的一种简单方法是将其安装到例如/opt/boost-1.63 而不是 /usr。

只要第一个也有效,两者都是同样的食物选择。

【讨论】:

  • 作为一个普遍的问题,我应该将旧的 libboost 版本安装在与当前版本相同的目录中,还是应该将其安装在不同的目录中?
  • 您需要将标头放在其他目录中,但库本身应进行版本控制,以防止名称冲突。不过,它们可能会自动符号链接到未版本化的名称,这取决于 Boost 构建系统。在这种情况下,请确保使用正确的 PKGBUILD,并且不要手动安装任何东西到 root。另一种方法是将旧版本安装到 /opt,这是迄今为止最简单的选择。
  • 感谢您的建议!如果我可以问一件小事。我在 pacman 缓存中找到了旧版本的 boost lib 并将其解压到/usr/oldlib/boot。但是现在只有库,现在是标题。和新版本一样吗?
  • 不,标题也不同(大多数提升也是仅标题)。打包的arch应该是boost和boost-libs。提取两者应该可以为您提供正确的安装。请注意,我强烈建议不要将这种东西放在 /usr 中,它应该由包管理器管理。只需将其放在 /opt 中即可。
  • 你说得对,我只安装了boost-lib包,却忘了boost包。
猜你喜欢
  • 2018-02-09
  • 2014-07-07
  • 2017-01-01
  • 2015-11-21
  • 1970-01-01
  • 1970-01-01
  • 2020-06-29
  • 2018-10-26
  • 2023-02-09
相关资源
最近更新 更多