Linux -soname深入理解

本文详细解释了库文件中的soname概念,说明了它如何帮助系统中多个库版本共存,并提供了如何更新库文件以适应程序需求的实用指南。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

-Wl 表示后面的参数也就是-soname,libhello.so.1直接传给连接器ld进行处理。实际上,每一个库都有一个soname,当连接器发现它正 在查找的程序库中有这样一个名称,连接器便会将soname嵌入连结中的二进制文件内,而不是它正在运行的实际文件名,在程序执行期间,程序会查找实际名字为 soname名字的文件。
这样做的目的主要是允许系统中多个版本的库文件共存,习惯上在命名库文件的时候通常与soname相同
libxxxx.so.major.minor
其中,xxxx是库的名字,major是主版本号,minor 是次版本号

简单的来说,soname指定了库的名字,而不去管生成的是什么实际名字的库,在做连接是将这个soname指定的名字加入执行文件中,而程序运行是也是去加载以soname为实际名字的库文件。即在lib下面寻找是否有实际名字为soname的名字。

所以如果程序连接了新升级的库,只需要将这个新库拷贝到目录下面即可。

如果库升级了,但是程序依旧使用旧的链接库(soname为旧版本),那么只需对这个以旧库的库名字创建软链接到新升级的库中去即可。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值