cmake编译程序运行时依赖链接库设置

原创
2019/11/28 16:21
阅读数 2K

编译运行的程序需要链接到程序所在路径下的某些个动态库,为方便移植,必须设置链接库的相对路径,比如./lib等等。

默认在Linux系统下动态库的搜寻路径如下:

  1. 使用选项 -Wl,-rpath 在编译时指定;
  2. 通过配置LD_LIBRARY_PATH 来指定;
  3. 在/lib 和 /usr/lib 中查找;

其中第一个在gcc编译选项中添加:-Wl,rpath=xxx 会将rpath路径写入到程序中保存起来。

 

以下两种方式都可以用来配置rpath路径:

1、使用gcc编译选项:

add_definitions(-std=c++11)
SET(CMAKE_CXX_FLAGS_DEBUG "$ENV{CXXFLAGS} -O0 -Wall -g -ggdb -Wl,-rpath=./:./lib") #-Wl,-rpath=./
SET(CMAKE_CXX_FLAGS_RELEASE "$ENV{CXXFLAGS} -O3 -Wl,-rpath=./:./lib") #-Wall

2、使用cmake配置

set(CMAKE_SKIP_BUILD_RPATH FALSE)
set(CMAKE_BUILD_WITH_INSTALL_RPATH TRUE)
set(CMAKE_INSTALL_RPATH_USE_LINK_PATH TRUE)
set(CMAKE_INSTALL_RPATH "./lib")

其中RPATH可以使用"./lib"或"./"配置,有可以使用"$ORIGIN/lib"或“\${ORIGIN}/lib”,这里必须加上\符号,否则无法识别。

还可以同时定义多个RPATH,比如:“$ORIGIN:$ORIGIN/lib”,中间使用:分割。

 

参考:https://blog.csdn.net/wh8_2011/article/details/79519293

CMAKE和RPATH:https://blog.csdn.net/zhangzq86/article/details/80718559

CMAKE中RPATH的用法:https://blog.csdn.net/z296671124/article/details/86699720

Linux C编程(8) 使用相对路径加载动态库-rpath和$ORIGIN

展开阅读全文
打赏
0
0 收藏
分享
加载中
更多评论
打赏
0 评论
0 收藏
0
分享
返回顶部
顶部