2016-06-07 92 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