栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 面试经验 > 面试问答

用于为其构建共享库的“ soname”选项是什么?

面试问答 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

用于为其构建共享库的“ soname”选项是什么?

soname用于指示您的库支持哪些二进制api兼容性。

SONAME
链接器在编译时使用它从库文件中确定实际的目标库版本。gcc -l
NAME
将寻找lib
NAME
.so链接或文件,然后捕获其SONAME,它肯定会更加具体(例如libnuke.so链接到包含SONAME
libnuke.so.0的libnuke.so.0.1.4)。

在运行时它将与之链接,然后将其设置为ELF动态节

NEEDED
,然后应存在具有该名称的库(或指向它的链接)。在运行时将
SONAME
被忽略,因此仅链接或文件存在就足够了。

备注:SONAME仅在链接/构建时强制执行,而不在运行时强制执行。

库的“ SONAME”可以与“ objdump -p文件| grep SONAME”一起看到。二进制文件“ NEEDED”可以在“ objdump
-p文件| grep NEEDED”中看到。

[编辑]警告以下是一般性说明,而不是Linux中部署的说明。参见最后。

假设您有一个名称为libnuke.so.1.2的库,并开发了一个新的libnuke库:

  • 如果您的新库是以前的修复程序,且未更改api,则应保持相同的名称,增加文件名的版本。即文件将是libnuke.so.1.2.1,但是soname仍然是libnuke.so.1.2。
  • 如果您有一个仅添加新功能但未破坏功能且仍与先前版本兼容的新库,则您希望使用与先前相同的名称,再加上新的后缀.1。即文件和soname将是libnuke.so.1.2.1。与libnuke.1.2链接的任何程序仍然可以使用该程序。与libnuke.1.2.1链接的新程序只能与该程序一起使用(直到新的Subversion像libnuke.1.2.1.1一样)。
  • 如果您的新库与任何libnuke不兼容:libnuke.so.2
  • 如果您的新库与旧版本兼容:libnuke.so.1.3 [即仍与libnuke.so.1兼容]

[编辑]完成:Linux情况。

在Linux现实生活中,SONAME是一种特定形式:lib [NAME] [API-VERSION] .so。[major-version] major-
version仅是一个整数值,该值在每次主要库更改时都会增加。API-VERSION默认为空

前libnuke.so.0

然后,实际文件名包括次要版本和子版本,例如:libnuke.so.0.1.5

我认为不提供soname是一种不好的做法,因为重命名文件会改变其行为。



转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/371010.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号