使用CMake编译生成so或可执行文件运行时,依赖的so必须放到系统目录或设置一些环境变量,对于在多个环境上部署或切换环境部署,每次运行可执行文件都要预先配置,操作起来比较麻烦。
本文针对CMake编译时设置 rpath 的一些问题
1 配置相对路径
自定义的链接目录如果使用绝对路径,当库文件目录发生变化时则找不到链接的库,采用相对路径尝试
set_target_properties(${TARGET_NAME} PROPERTIES LINK_FLAGS "-Wl,-rpath,./lib")
配置成功后查看可执行文件链接路径
可是当在其他目录运行可执行程序时,则找不到库文件。
因为相对路径将相对于运行程序时的当前工作目录,而不是相对于找到二进制文件/库的目录,所以使用相对路径意义不是很大,除非在可执行文件路径下执行程序。
2 配置绝对路径
set_target_properties(${TARGET_NAME} PROPERTIES LINK_FLAGS
"-Wl,-rpath,${SDK_LIBS_DIR}:/usr/local/MATLAB/MATLAB_Runtime/v99/bin/glnxa64")
只需要设置好SDK_LIBS_DIR目录名称,其他运行环境安装在此目录下,则可正常工作。
注意:在CMake使用中,遇到 make install 会清除通过 link_directories() 配置的rpath路径。
所以避免该问题则使用set_target_properties配置。