2013-05-06 107 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