rpath 用法(注意动态库版本)


-rpath dir or --rpath=dir
为了兼容其他 ELF 链接器,如果 -R 选项的值是个目录而不是文件,那么此时相当与 -rpath
注:-R filename 与 --just-symbols=filename 等价
如果链接时没使用 '-rpath' ,那么如果定义了 LD_RUN_PATH 就会使用该值作为 rpath


ld 如果不是直接被调用的,而是是通过一个驱动程序如 gcc 调用,那么的所有的链接选项都需要加上前缀 "-Wl,", 选项和值之间用","隔开
所以gcc的rpath用法: 

-Wl,-rpath,dir
多个dir之间用冒号分隔: 

-Wl,-rpath,dir1:dir2:...:dirN

$ORIGING
代表程序目录,需要加单引号,否则会被解释为变量ORIGIN的值。这样gcc的链接flags为
-Wl,-rpath,'$ORIGIN'

'-Wl,-rpath,$ORIGIN'

用 readelf 查看编译后的程序
readelf -d path
会发现多了类似与这么一行
0x0000000f (RPATH)                      Library rpath: [$ORIGIN]
这样,程序运行前会先搜索程序所在路径有没有依赖的库。


Makefile 中的写法:
注意Makefile里要用两个
,只用一个$会展开成变量值,
,只用一个$会展开成变量值,
相当与转义成$
LFLAGS += '-Wl,-rpath,$$dir'

qmake 工程中的写法:
QMAKE_LFLAGS += -Wl,-rpath,\'\$\$dir\'

QMAKE_RPATHDIR += :\'\$\$dir\' 
注意QMAKE_RPATHDIR最开始要加冒号,因为生成Makefile会自动在前面加上-Wl,-rpath,$$PWD

  • 3
    点赞
  • 13
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值