3.16 动态链接(3): 共享库

动态链接(3):共享库

1 命名方式

libname.so.x.y.z
x:主版本号,表示库的重大升级、不同主版本号之间不兼容
依赖旧版本的程序需要重新编译、才能运行
y:次版本号,库的增量升级即增加一些新的接口符号,
原来的接口符号不变,高版本向后兼容低版本
z:发布版本号,一些错误修正、性能改进等,不增加新接口、
原来接口保持不变

2 共享库的SO-NAME命令机制

  1. 用来记录共享库的依赖关系
  2. 每个共享库都有一个对应的SO-NAME,去掉次、发布版本号 系统会创建一个跟SO-NAME同名的 软连接 ,指向主版本号相同、 次版本号和发布版本号最新的共享库

依赖某个共享库的模块,都使用SO-NAME,而不是详细的版本
号,SO-NAME作为一个库的接口,利于系统升级

3 共享库的路径

  1. /lib:
    存放系统最关键和基础的共享库,如动态链接器、C库、 数学库等,这些库主要是/bin、/sbin下程序运行、以及系统启
    动所需要的库
  2. /usr/lib:
    非系统运行所需要的关键性的共享库,比如开发时用 到的一些共享库,这些库一般不会被用户的程序或者shell脚本 用到
  3. /usr/local/lib:
    主要存放第三方应用程序所需要的一些库

4 库的查找过程

4.1 基本过程

  1. ELF文件执行,动态链接器/lib/ld-linux-so.x被加载启动,到.dynamic段里面寻找ELF文件依赖的共享库
  2. 若该路径是绝对路径,直接到该绝对路径下面寻找
  3. 若该路径是相对路径,到/lib、/usr/lib、/etc/ld.so.conf配置文件指定的目录去查找共享库。

4.2 库目录缓存

  1. /etc/ld.so.conf存放共享库的路径,为避免每次查找,耗费时间,可以使用ldconfig生成一个缓存/etc/ld.so.cache
  2. 新增、删除或者更新共享库路径时,ldconfig一下更新缓存即可

5 环境变量

LD_LIBRARY_PATH

  1. 由若干个路径组成的环境变量,每个路径用冒号隔开
  2. 可以使用该变量临时改变程序依赖的共享库查找路径,而不影响系统中的其它应用程序
  • 5
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值