CMake中RPATH的处理

本文介绍CMake中RPATH的默认行为及其配置方法。默认情况下,CMake不会为安装后的目标添加RPATH信息,这可能导致加载共享库时出现问题。文章详细说明了如何通过设置CMake变量来调整RPATH的行为。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

CMake默认不会对安装之后的目标,在头部加上RPATH信息。而对构建产生的中间文件,是会加上RAPTH信息的。RPATH中的路径信息,来自link_directories()中指定的库所在路径,不管这些路径,是属于工程的构建路径(CMAKE_BINARY_DIR),还是外部路径。然后在make install之后,安装目标的头部不会增加RPATH。如果恰好那些路径,不在系统的标准库查找范围,这时运行会出现

error while loading shared libraries: xxx

这样的错误信息。

这时,可以通过设置LD_LIBRARY_PATH的环境变量,来告知系统额外的库查找路径。

也可以加上

SET(CMAKE_INSTALL_RPATH_USE_LINK_PATH TRUE)

来让CMake在安装的目标中加入RPATH信息,但是注意即便加了这个,对于位于工程构建路径的那些PATH,还是不会加入到最终的RPATH当中的。

另外,也可以手动指定添加的RPATH:

SET(CMAKE_INSTALL_RPATH "${CMAKE_INSTALL_PREFIX}/lib")

对于这种情况,默认情况下,这个PATH在构建产生的中间文件,是不增加的;而是只对安装的目标有效。如果你想针对构建的中间文件也有效果,可以加上

SET(CMAKE_BUILD_WITH_INSTALL_RPATH TRUE)

参考:https://cmake.org/Wiki/CMake_RPATH_handling

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值