2012-06-04 46 views
1

如何指示CMake鏈接庫的非編號版本?使用Boost庫時,比如我有:CMake可鏈接到未編號的庫

find_package(Boost COMPONENTS regex program_options REQUIRED) 
target_link_libraries(main ${Boost_PROGRAM_OPTIONS_LIBRARY}) 

和反對libboost_program_options.so.1.49.0可執行文件的鏈接。如果我嘗試在較老的機器上運行此可執行文件,它將失敗,因爲找不到該庫,儘管我知道該功能已經存在於該庫版本中。

回答

0

這是行不通的。即使功能在那裏,確切的API可能不在那裏。這就是爲什麼UNIX鏈接系統使用符號鏈接,以便鏈接器訪問未編號的符號鏈接,然後在寫出依賴關係列表時將其取消引用,以在運行時要求相同的主要版本。

你有3種選擇:

  1. 重新編譯你的目標機器上與舊的推動作用。
  2. 與您的可執行文件一起分發必要的增強庫。這可能涉及編寫運行前設置LD_LIBRARY_PATH的啓動腳本。
  3. 與靜態boost庫鏈接以消除您的運行時依賴關係。 find_package前使用此行:

SET(Boost_USE_STATIC_LIBS ON)