【发布时间】:2018-07-04 14:36:51
【问题描述】:
我正在使用 CMAKE 构建共享库camera,它依赖于api.so,它也是共享库。库camera.so 由server 可执行文件使用,我在linux 上。
我在 ~/projects/server/camera/build 中有 CMAKE 构建目录。
生产环境的服务器结构如下:
-
/opt/serverserverapi.so-
/lib/camera.so
我有以下 CMAKE 脚本:
SET(LIB_DIR ${PROJECT_SOURCE_DIR}/lib/Release)
ADD_LIBRARY(api SHARED IMPORTED)
SET_PROPERTY(TARGET api PROPERTY IMPORTED_LOCATION ${LIB_DIR}/api.so)
TARGET_LINK_LIBRARIES(camera
api
)
变量PROJECT_SOURCE_DIR 包含~/projects/server。
我需要使用IMPORTED_LOCATION,因为api.so 库名称不以lib 开头,对此我无能为力,它正在工作。
我成功构建了camera.so,然后我将它放在生产服务器上的/opt/server/lib 目录下。当我运行ldd /opt/server/lib/camera.so 时,我可以看到库正在我在构建机器上拥有它的目录中寻找api.so,但我想强制库在运行时向上一级寻找它,所以在@987654341 @。
我不在乎是使用相对路径还是绝对路径,但它需要位于我使用它在我的计算机上链接的位置以外的其他地方。我不想用LD_LIBRARY_PATH,应该在CMAKE脚本中解决。
到目前为止我找到并尝试了:
SET(CMAKE_INSTALL_RPATH "@executable_path/../")
SET(CMAKE_INSTALL_RPATH "$ORIGIN/../")
但ldd 仍然一直告诉我它正在寻找我的构建目录,而该目录在生产中不存在。
你能告诉我应该使用什么 CMAKE 命令来解决这个问题吗?我做错了吗?
【问题讨论】:
标签: cmake shared-libraries ldd