假设我使用cmake构建myTest
。 myTest
在编译和链接时使用/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-那么我该如何做呢?
答案 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
。