Linux查看lib加载路径

本文详细介绍了Linux系统中动态链接库(LD_LIBRARY_PATH, RPATH, RUNPATH)的加载优先级,并通过实例展示了如何查看程序运行时的库搜索情况。了解这些机制对于理解和调试依赖问题至关重要。
摘要由CSDN通过智能技术生成

一.Linux加载Lib优先级:

总的来说,优先级方案可以归类为以下两种版本 。(LD_PRELOAD的优先级最高)
一.如果指定了 RUNPATH 字段(即 DT RUNPATH 字段非空):
1 ) LD LIBRARY PATH 。
2) runpath (DT_RUNPATH 宇段) 。
3 ) Id.so .cache 。
4) 默认库路径(Ilib 和 /usr/lib) 。
二.如果没有指定 RUNPATH 字段( 即 DT RUNPATH 宇段为空字符串):
1 )被加载库的 RPATH ,然后是二进制文件的 RPATH ,直到可执行文件或者动态库将这
些库全部加载完毕为止 。
2) LD LIBRARY PATH 。
3 ) Id.so.cache 。
4 ) 默认库路径(/Iib 和 /usr/lib) 。

二.查看runpath

/home# readelf -d aa

Dynamic section at offset 0xd60 contains 30 entries:
  Tag        Type                         Name/Value
 0x0000000000000001 (NEEDED)             Shared library: [libtest.so]
 0x0000000000000001 (NEEDED)             Shared library: [libstdc++.so.6]
 0x0000000000000001 (NEEDED)             Shared library: [libc.so.6]
 0x000000000000001d (RUNPATH)            Library runpath: [/home/kehao/Learn/c++/lib2]
 0x000000000000000c (INIT)               0x898
 0x000000000000000d (FINI)               0xb74
 0x0000000000000019 (INIT_ARRAY)         0x200d48
 0x000000000000001b (INIT_ARRAYSZ)       16 (bytes)
 0x000000000000001a (FINI_ARRAY)         0x200d58
 0x000000000000001c (FINI_ARRAYSZ)       8 (bytes)
 0x000000006ffffef5 (GNU_HASH)           0x298
 0x0000000000000005 (STRTAB)             0x4b8
 0x0000000000000006 (SYMTAB)             0x2d8
 0x000000000000000a (STRSZ)              449 (bytes)
 0x000000000000000b (SYMENT)             24 (bytes)
 0x0000000000000015 (DEBUG)              0x0
 0x0000000000000003 (PLTGOT)             0x200f80
 0x0000000000000002 (PLTRELSZ)           144 (bytes)
 0x0000000000000014 (PLTREL)             RELA
 0x0000000000000017 (JMPREL)             0x808
 0x0000000000000007 (RELA)               0x6e8
 0x0000000000000008 (RELASZ)             288 (bytes)
 0x0000000000000009 (RELAENT)            24 (bytes)
 0x000000000000001e (FLAGS)              BIND_NOW
 0x000000006ffffffb (FLAGS_1)            Flags: NOW PIE
 0x000000006ffffffe (VERNEED)            0x6a8
 0x000000006fffffff (VERNEEDNUM)         2
 0x000000006ffffff0 (VERSYM)             0x67a
 0x000000006ffffff9 (RELACOUNT)          4
 0x0000000000000000 (NULL)               0x0
 

三.查看程序运行时库的搜索情况

方法一:

LD_DEBUG=libs ./aa

方法二:

strace ./aa


 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值