生成/安装可执行文件后,如何更改其库路径?

时间:2018-06-26 22:11:05

标签: cmake

假设我使用cmake构建myTestmyTest在编译和链接时使用/opt/path1/lib/lib.so。运行几次后,我决定让myTest现在使用/opt/path2/lib.so(相同的库名,相同的接口,不同的路径)。

这可能是因为我想临时测试对lib.so的更改,而不影响可能正在使用它的其他人。我也可能没有myTest的来源,但知道它使用lib.so。

如果我使用Makefile并使用常规gnu / g ++ make,则可以通过在本地文件夹中设置LD_LIBRARY_PATH来实现此目的。 CMake会忽略LD_LIB_PATH-那么我该如何做呢?

1 个答案:

答案 0 :(得分:0)

为了在运行时查找库,ldd使用(其中包括)嵌入到可执行文件中的 RPATH 目录。

通过默认,在构建可执行文件/库时,CMake将添加到链接库所在的RPATH目录中。

例如,当与库/opt/path1/lib/lib.so链接时,CMake将目录/opt/path1/lib添加到RPATH。因此,ldd总是将lib.so的库查找为/opt/path1/lib/lib.so

要告知CMake 未设置RPATH ,请设置CMAKE_SKIP_RPATH变量:

set(CMAKE_SKIP_RPATH TRUE)

然后,ldd将在lib.so环境变量中列出的目录中搜索LD_LIBRARY_PATH