【问题标题】:External Library Boost Version Problems外部库 Boost 版本问题
【发布时间】:2016-06-07 22:12:26
【问题描述】:

我有一个来自我从事的项目的外部库,该库是针对 boost 1.55 编译的;我已经转移到另一个需要使用这个库的项目,但当前系统使用的是 boost 1.58

当我链接到该库时,它抱怨它缺少对 boost 1.55 库的引用。我链接的库是使用以下 find_package 命令编译的:

find_package( Boost 1.55 COMPONENTS ... REQUIRED )

我知道 CMake 有一个 min 命令,但我不确定这是否允许我在当前运行 1.58 的机器上使用针对 boost 1.55 编译的库强>.

任何关于如何编译这个外部库以便它使用与 1.55 兼容的任何版本的 boost 的建议都将非常感激!

新程序的 find_package 命令尝试查找 boost):

find_package( Boost 1.55 COMPONENTS system filesystem chrono regex thread date_time REQUIRED )

新程序所在的系统升压为 1.58 而不是 1.55,因此它输出以下内容:

-- Boost version: 1.58.0
-- Found the following Boost libraries:
--   system
--   filesystem
--   chrono
--   regex
--   thread
--   date_time
--   atomic

compile 在 1.58 上运行良好,只有当新程序链接到库(针对 1.55 编译)时,它才会抱怨无法找到 boost 1.55 库(见下文) .

链接输出:(新程序链接到库)

/usr/bin/ld: warning: libboost_system.so.1.55.0, needed by library.so, not found (try using -rpath or -rpath-link)
/usr/bin/ld: warning: libboost_filesystem.so.1.55.0, needed by library.so, not found (try using -rpath or -rpath-link)
/usr/bin/ld: warning: libboost_chrono.so.1.55.0, needed by library.so, not found (try using -rpath or -rpath-link)
/usr/bin/ld: warning: libboost_regex.so.1.55.0, needed by library.so, not found (try using -rpath or -rpath-link)
/usr/bin/ld: warning: libboost_thread.so.1.55.0, needed by library.so, not found (try using -rpath or -rpath-link)
/usr/bin/ld: warning: libboost_date_time.so.1.55.0, needed by library.so, not found (try using -rpath or -rpath-link)

【问题讨论】:

  • 您真的有问题吗?是这样发布详细信息。
  • 我更新了这个问题,希望能更清楚。

标签: c++ boost linker


【解决方案1】:
find_package( Boost 1.55 COMPONENTS ... REQUIRED )

如果它发现任何版本的 Boost >= 1.55 都会感到满意。

find_package( Boost 1.55 EXACT COMPONENTS ... REQUIRED )

只会对 Boost 1.55 感到满意。

因此,如果您只是使用相同的 CMakeLists 重新构建库 在 Boost 1.58 的存在下,它应该是好的。

稍后

我正在尝试提出一种可以编译库一次的方法 (比如使用 boost 1.55),这样如果在另一个正在运行的系统上 新版本的 boost 说 1.58;不会抱怨没有 1.55 的提升 当它具有可用的 1.58 版本的 boost 库时的库

你不能这样做:

find_package( Boost 1.55 COMPONENTS ... REQUIRED )

将允许您使用 boost 1.55 或更高版本构建库 但是您构建的库将与 实际上找到的 boost 版本,并且该动态链接已烘焙 通过 OS loader 的信息进入二进制文件。

因此,如果您将该库带到某个没有 boost 1.55 的系统 当您尝试链接 图书馆和其他任何东西。

很遗憾,您将不得不在 boost 1.58 存在的情况下构建这个库 将其与提升 1.58 的系统上的任何内容链接。

【讨论】:

  • 这就是我的想法,但我已经为第一个库(链接到 1.55 的库)使用了第一个 CMake 指令,但随后在另一台机器上我尝试链接1.58,它抱怨周围没有 1.55 库。我是否还需要带有原始库构建的 1.58 库?
  • @badrobit 对不起,我不明白 :(
  • 我试图想出一种方法,我可以编译一次库(比如使用 boost 1.55),这样如果在另一个运行新版本 boost 的系统上说 1.58;当它有可用的 1.58 版本的 boost 库时,不会抱怨没有 1.55 的 boost 库。
  • 我再次更新了这个问题,希望这有助于解决混乱。
  • @badrobit 我明白了。答案展开。
猜你喜欢
  • 2014-12-30
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-09-16
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多