Linux -soname深入理解

-Wl 表示后面的参数也就是-soname,libhello.so.1直接传给连接器ld进行处理。实际上,每一个库都有一个soname,当连接器发现它正 在查找的程序库中有这样一个名称,连接器便会将soname嵌入连结中的二进制文件内,而不是它正在运行的实际文件名,在程序执行期间,程序会查找拥有 soname名字的文件,而不是库的文件名,换句话说,soname是库的区分标志。

这样做的目的主要是允许系统中多个版本的库文件共存,习惯上在命名库文件的时候通常与soname相同

libxxxx.so.major.minor

其中,xxxx是库的名字,major是主版本号,minor 是次版本号

简单的来说,soname指定了库的名字,而不去管生成的是什么名字的库,在做连接是将这个soname指定的名字加入执行文件中,而程序运行是也是去加载soname指定的库文件名。所以如果程序连接了新升级的库,只需要将这个新库拷贝到目录下面后,对其以soname做一个符号链接就能调用。

如果库升级了,但是程序依旧使用旧的链接库,那么只需对这个将旧库名字软链接到新升级的库中去即可。

<script>window._bd_share_config={"common":{"bdSnsKey":{},"bdText":"","bdMini":"2","bdMiniList":false,"bdPic":"","bdStyle":"0","bdSize":"16"},"share":{}};with(document)0[(getElementsByTagName('head')[0]||body).appendChild(createElement('script')).src='http://bdimg.share.baidu.com/static/api/js/share.js?v=89860593.js?cdnversion='+~(-new Date()/36e5)];</script>
阅读(124) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~
评论热议
  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
在中,当共享库(shared library)的接口发生重大变化时,可能会进行"soname bump"操作。"soname"是指共享库的名字,它用于标识库的版本和接口。 Soname bump是指对共享库进行更改,需要修改库的soname,以指示接口的变化。这样做的目的是为了确保旧的二进制程序仍然可以与旧版本的库保持兼容,而新的二进制程序则可以链接到新版本的库。 Soname bump通常涉及以下步骤: 1. 修改共享库的接口:在进行soname bump之前,可能会对共享库的接口进行更改,例如添加、删除或修改函数的签名、结构体的布局等。这些更改会导致旧版本的二进制程序无法与新版本的库兼容。 2. 修改共享库的soname:将共享库的soname更改为反映接口变化的新版本号。soname通常遵循一定的命名约定,例如使用lib<name>.so.<version>的形式,其中<name>是库的名称,<version>是库的版本号。 3. 重新编译和链接依赖于共享库的二进制程序:在soname bump之后,依赖于共享库的二进制程序需要重新编译和链接,以便它们可以使用新的接口。 4. 兼容性处理:为了确保向后兼容性,可以采取一些措施,如提供符号版本控制(Symbol Versioning)或使用动态符号表(Dynamic Symbol Table)。这些机制可以在运行时动态地加载适当版本的共享库。 进行soname bump操作时,需要谨慎处理,并与相关的二进制程序开发者和用户进行充分的沟通和测试,以确保过渡过程中的兼容性和稳定性。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值