编译运行的程序需要链接到程序所在路径下的某些个动态库,为方便移植,必须设置链接库的相对路径,比如./lib等等。
默认在Linux系统下动态库的搜寻路径如下:
使用选项 -Wl,-rpath 在编译时指定;
通过配置LD_LIBRARY_PATH 来指定;
在/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”,中间使用:分割。
文章来源: www.oschina.net,作者:极客行,版权归原作者所有,如需转载,请联系作者。
原文链接:https://my.oschina.net/u/3489228/blog/3134953