使用CMake,启用RUNPATH
特性,可以参考官方帖子。
如下源码来自于上述帖子。
CMAKE_MINIMUM_REQUIRED(VERSION 2.8 FATAL_ERROR)
PROJECT(RUNPATH C)
SET(CMAKE_VERBOSE_MAKEFILE ON)
SET(CMAKE_INSTALL_RPATH $ENV{HOME}/lib)
FILE(WRITE ${CMAKE_BINARY_DIR}/main.c "int main(void){return 0;}\n")
ADD_EXECUTABLE(main main.c)
INSTALL(TARGETS main RUNTIME DESTINATION bin)
SET(CMAKE_EXE_LINKER_FLAGS "-Wl,--enable-new-dtags")
关于CMake和RPATH
,可以参考如下文档:
- RPATH handling
- CMAKE_SKIP_RPATH
- CMAKE_SKIP_BUILD_RPATH
- CMAKE_SKIP_INSTALL_RPATH
- CMAKE_BUILD_WITH_INSTALL_RPATH
- CMAKE_INSTALL_RPATH_USE_LINK_PATH
- INSTALL_RPATH
- CMAKE_INSTALL_RPATH
- 探讨CMake中关于RPATH的使用
- 再谈CMake与RPATH
关于RPATH
和RUNPATH
的区别,可以参考如下文章,介绍比较详细。
在命令行,执行如下命令,来查看相关的RPATH
信息。
readelf -d executable
在命令行,执行如下命令,可以查看当前查找到的动态库。
ldd executable
RPATH
、RUNPATH
、LD_LIBRARY_PATH
三者之间的关系。
RPATH
>LD_LIBRARY_PATH
>RUNPATH
- 当
RUNPATH
存在时,则RPATH
失效。
RUNPATH
不适用于间接依赖的库,使用RUNPATH
时,可能需要配合使用LD_LIBRARY_PATH
。