使用动态库运行cmake项目

时间:2013-05-06 17:31:16

标签: cmake shared-libraries

我正在开发一个使用第三方闭源SDK的项目,该SDK由一个共享库和相应的头文件组成。我试图避免将库添加到搜索路径中,因此我可以尝试针对库的几个不同版本编译项目以进行测试。

我的问题是如何处理共享库,以便项目构建和运行良好?我可以构建项目,但新创建的可执行文件找不到我需要的共享库。如果我将共享库复制到与可执行文件相同的文件夹,它将运行,但我想避免手动执行额外步骤以使其他开发人员更容易。什么是管理共享库依赖项的好方法,以便在项目构建时,即使没有搜索路径中的共享库,它也可以运行?

以下是我的CMakeLists.txt文件的相关部分,显示了我如何查找共享库:

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 个答案:

答案 0 :(得分:1)

如果您在Linux或Mac上运行,并且您所依赖的共享库的位置知道您可以使用rpath在可执行文件中包含库搜索路径。参见例如:

或者,您可以配置一个脚本来执行程序,然后在执行二进制文件之前动态调整PATH(Windows),LD_LIBRARY_PATH(Linux)或DYLD_LIBRARY_PATH(Mac)。这些环境变量用于在运行时解析共享库。