阅读977 返回首页    go 阿里云 go 技术社区[云栖]


CMake中RPATH的处理

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

最后更新:2017-09-26 13:32:42

  上一篇:go  安全人工智能应用之我见:时代“风口”的交叉点
  下一篇:go  阿里云首推免费人脸识别SDK 让每个APP轻松拥有短视频AR特效