Linux library查找顺序(按优先级排列)

1. -Wl,-rpath-link

该配置为 “ld option”
其中,-Wl选项告诉编译器将后面的参数传递给链接器
在链接时指定库的路径,不影响程序执行时库的路径

2. -Wl,–rpath=.,–enable-new-dtags

该配置为 “ld option”
链接可执行程序时写入路径信息DT_RUNPATH
在opensuse上指定-R或–rpath会同时添加DT_RUNPATH和DT_RPATH两个section。对于其他的发行版会只设置RPATH,只有在指定–enable-new-dtags才会加上DT_RUNPATH。
值得注意的是:如果设置了RUN_PATH则完全无视RPATH,而且也不先看自己的RUN_PATH,而是去看LD_LIBRARY_PATH,没有再去看RUN_PATH

3. -Wl,-rpath,

该配置为 “ld option”
-R(或-rpath)指定程序运行时库的路径,当指定多个动态库搜索路径时,路径之间用冒号":"分隔
-R或-rpath选项将指定的路径信息(DT_RPATH)保存在可执行文件中,运行时它会直接到该路径查找库
写入的DT_RPATH信息可用 ”readelf -d a.out“ 查看
如未找到被加载对象的RPATH,则递归查找其loader直到链条的顶端(可执行程序或被dlopen打开的对象)的RPATH

4. D_RUN_PATH

该配置为 “environment variable”
在ELF 系统中, 对于native linker,如果未指定-rpath-link 和 -rpath,系统会使用该环境变量指定的路径

5. -L选项

该配置为 “gcc option”
用于设置动态库的搜索位置
仅在链接时生效,不影响程序执行时库的路径

6. LD_LIBRARY_PATH

该配置为 “environment variable”
全局有效,指定链接时和运行时库搜索路径

7. /lib

包含许多被 /bin/ 和 /sbin/ 中的程序使用的内核级库文件

8. /usr/lib

被/usr目录下的程序所使用的系统级共享库

9. /etc/ld.so.cache

ldconfig命令在默认搜寻目录/lib和/usr/lib以及动态库配置文件/etc/ld.so.conf内所列的目录下,搜索出可共享的动态链接库(格式如lib*.so*)
搜索结果按名字排序后写入缓存文件/etc/ld.so.cache
往/lib和/usr/lib里面加东西,是不用修改/etc/ld.so.conf的,但之后要调一下ldconfig
往其他目录,一定要修改/etc/ld.so.conf,然后再调用ldconfig

值得注意的是 LD_LIBRARY_PATH 的优先级是高于 /lib 和 /usr/lib 的。

  • 1
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 4
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值