2016-06-07 131 views
0

我有一个外部库,我从事的一个项目是针对boost 1.55编译的;我已经转移到另一个需要使用此库的项目,但当前系统正在使用boost 1.58外部库升级版本问题

当我链接到库时,它抱怨说它缺少boost 1.55库的引用。

find_package(Boost 1.55 COMPONENTS ... REQUIRED) 

我知道有一分钟命令CMake的,但我不知道这是否会允许我使用这是对提升编译库:我链接到的库使用以下find_package命令编译在当前运行的机器上使用1.551.58

有关如何编译此外部库的任何建议,以便它将使用与1.55兼容的任何版本的升压将非常感激!对于新方案试图找到升压

find_package命令):

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 

编译工作正常对1.58它只是当新的程序链接到库(编译对1.55),它抱怨无法找到e提升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) 
+0

你确实有问题吗?是如此张贴细节。 –

+0

我更新了这个问题,希望能让它更清晰。 – badrobit

回答

1
find_package(Boost 1.55 COMPONENTS ... REQUIRED) 

会满意如果发现升压> = 1.55的任何版本。

find_package(Boost 1.55 EXACT COMPONENTS ... REQUIRED) 

只会满足升压1.55。

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

后来

我想,这样如果在另一个系统上运行 一个拿出我可以编译库一次 (说使用boost 1.55)的方式方法boost的新版本说1.58;当它有1时,不会抱怨没有1.55增强库。58版本Boost库的

你不能做到这一点:

find_package(Boost 1.55 COMPONENTS ... REQUIRED) 

将让你与升压建库 1.55 或更高版本 但库构建会可以动态链接到 boost实际上找到的版本,并且该动态链接通过OS加载器的信息的方式将 转换为二进制文件。

所以,如果你把这个库的一些系统中提高1.55缺席 你会得到链接错误,如你有,当你尝试将 库与任何其他链接看到。

值得注意的是,您必须在boost 1.58 的存在下构建此库,以便将其与系统中的任何内容链接到boost 1.58。

+0

这就是我的想法,但我已经为第一个库(连接到** 1.55 **)使用了第一个CMake指令,但是在另一台机器上我试图链接** 1.58 **,并且抱怨没有** 1.55 **库。我是否还需要具有原始库构建的** 1.58 **库? – badrobit

+0

@badrobit对不起,我不明白:( –

+0

我试图想出一种方法,我可以用一种方式编译库(比如说使用boost 1.55),以便在另一个运行新系统的系统上boost的版本说1.58;当它有1.58版本的boost库可用时,不会抱怨没有1.55 boost库 – badrobit