2013-05-06 368 views
0

我正在使用由單個共享庫和相應頭文件組成的第三方閉源SDK的項目。我試圖避免將庫添加到搜索路徑,所以我可以嘗試編譯項目對照幾個不同版本的庫進行測試。使用動態庫運行cmake項目

我的問題是我該如何處理共享庫,因此該項目生成並運行得好嗎?我可以構建項目,但新創建的可執行文件無法找到我需要的共享庫。如果我將共享庫複製到與可執行文件相同的文件夾中,它會運行,但我想避免手動執行額外的步驟以使其他開發人員更容易。管理共享庫依賴關係的好方法是什麼?這樣當項目建成時,即使沒有搜索路徑中的共享庫,它也可以運行?

這裏是我的CMakeLists.txt文件顯示我是如何定位的共享庫的relavent部分:

add_library(theSDK SHARED IMPORTED) 
set_target_properties(theSDK PROPERTIES IMPORTED_LOCATION 
    ${CMAKE_CURRENT_SOURCE_DIR}/lib/TheSDK/lib/libSDK.dylib) 
add_executable(myProject ${myProject_SOURCES}) 
target_link_libraries (myProject theSDK) 

回答

1

如果您在Linux或Mac上運行,你是依賴於共享庫的位置知道你可以使用rpath在你的可執行文件中包含庫搜索路徑。例如參見:

或者,你可以爲之前執行,然後動態調整PATH(Windows)中的程序,LD_LIBRARY_PATH(Linux)或DYLD_LIBRARY_PATH(蘋果機)配置腳本執行你的二進制。這些環境變量用於在運行時解析共享庫。

+0

這看起來好像對我很好,但我正在使用的開發人員需要在Windows計算機上運行它。我會試試看看它是如何發展的。 – Danny 2013-05-07 15:52:46

+0

對此的任何結果? – languitar 2013-05-17 11:57:34