Linux -L, -l, -rpath, -rpath-link, LD_LIBRARY_PATH和RUNPATH使用说明

1. 可执行ELF文件自身加载so的情况如下:

  • LD_LIBRARY_PATH是个环境变量可以用来指定加载so的路径,并且优先级高于系统默认的。
  • PRATH是ELF格式里的一个数据,它的优先级比LD_LIBRARY_PATH还要高。
  • RUNPATH也是ELF格式中的一个数据,如果RUNPATH出现,则RPATH就躲起来了(即RPATH不生效了),LD_LIBRARY_PATH又成了首选。

ELF中的RPATH

ELF中的RUNPATH

LD_LIBRARY_PATH环境变量

尝试加载目录的数序

未设置

未设置

未设置

/lib==>/usr/lib

未设置

未设置

设置

${LD_LIBRARY_PATH}==>/lib==>/usr/lib

设置

未设置

未设置

${RPATH}==>/lib==>/usr/lib

设置

未设置

设置

${RPATH}==>${LD_LIBRARY_PATH}==>/lib==>/usr/lib

设置或未设置

设置

设置

${LD_LIBRARY_PATH}==>${RUN_PATH}==>/lib==>/usr/lib

设置或未设置

设置

未设置

${RUN_PATH}==>/lib==>/usr/lib

 

2. 怎样让可执行文件链接指定的动态库?

系统中存在soname为libpcre.so.1和libpcre.so.3两个动态库,怎样让编译出来的可执行文件链接libpcre.so.1的soname动态库?

解答:首先使用-L指定动态库的位置,然后使用-l:libpcre.so.1的全名即可。-L${PWD}/usr/lib -l:libpcre.so.1。

 

3. gcc编译怎样指定特定的链接器?

-Wl,--dynamic-linker=/path/lib/ld-linux-x86-64.so.2

 

  • 3
    点赞
  • 12
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值