如何在CMake中更改LD_LIBRARY_PATH?

时间:2015-05-21 17:12:41

标签: cmake shared-libraries dynamic-linking

我有一个本地共享库,它不在$ LD_LIBRARY_PATH中。 我想运行我的可执行文件,但由于它无法在系统文件夹中找到共享库,因此在加载共享库时输出“错误”。

可能的解决方法是导出包含本地库文件夹的新LD_LIBRARY_PATH。

如何在CMake中自动导出此环境变量?

3 个答案:

答案 0 :(得分:8)

您可以使用-rpath链接器选项设置运行时共享库​​搜索路径:

SET(CMAKE_EXE_LINKER_FLAGS 
          "${CMAKE_EXE_LINKER_FLAGS} -Wl,-rpath -Wl,/usr/local/lib")

答案 1 :(得分:4)

如果您的共享库不是在可执行文件的同一CMake项目中构建的,则可以像这样使用CMake rpath处理:

set(CMAKE_INSTALL_RPATH_USE_LINK_PATH TRUE)

当您运行make install时,CMake会自动将可执行文件的运行时路径设置为共享库。

如果您的共享库是在同一个CMake项目中构建的,请使用:

set(CMAKE_INSTALL_RPATH "/usr/local/lib")
set(CMAKE_INSTALL_RPATH_USE_LINK_PATH TRUE)

在这种情况下,您必须将自己的共享库安装目录添加到运行时路径中。

有关详细信息,请参阅CMake rpath handling

答案 2 :(得分:0)

使用此解决方案时:

SET(CMAKE_INSTALL_RPATH_USE_LINK_PATH TRUE)

在定义CMake文件中的目标之前,请先设置RPATH。因此,此指令必须在调用add_executable()add_library()之前,否则无效。