应用程序在运行时如何解析为共享库的不同版本?

应用程序在运行时如何解析为共享库的不同版本?,第1张

应用程序在运行时如何解析为共享库的不同版本

共享库的版本控制如下:

创建共享库时,请给它一个真实名称和一个

soname
。这些用于安装共享库(创建共享库和指向共享库的链接)。

因此,您可能会遇到以下情况:

pax> ls -al xyz*-rw-r--r--  1 pax paxgroup    12345 Nov 18  2009 xyz.so.1.5lrwxrwxrwx  1 pax paxgroup        0 Nov 18  2009 xyz.so.1 -> xyz.so.1.5lrwxrwxrwx  1 pax paxgroup        0 Nov 18  2009 xyz.so -> xyz.so.1

xyz.so.1.5
拥有的
SONAME
xyz.so.1

当连接环节

xyz.so
,它遵循的链接一路
xyz.so.1.5
和使用其
SONAME
xyz.so.1
存储的可执行文件。然后,当您 运行
该可执行文件时,它会尝试加载
xyz.so.1
指向某个特定文件
xyz.so.1.N
(不一定是1.5版)的文件。

因此,您可以安装

xyz.so.1.6
和更新
xyz.so.1
链接以指向该链接,而已经链接的可执行文件将使用该链接。

这种多层方法的一个优点是,您可以拥有多个同名(

xyz.so.1.*
xyz.so.2.*
)的潜在不兼容库,但是在每个主要版本中,
由于它们应该兼容 ,因此可以自由升级它们。

链接新的可执行文件时:

  • 与之链接的人
    xyz.so
    将获得最新主要版本的最新次要版本。
  • 与之链接的其他人
    xyz.so.1
    将获得特定主要版本的最新次要版本。
  • 还有其他链接
    xyz.so.1.2
    将获得特定主要版本的特定次要版本。

现在,当我们检查您的评论时,请记住最后一段:

现在让我们说我用以下实名编译同一库的另一个版本

libmy.so.2.0
。根据指南,SONAME为
libmy.so.2.0

不,我不相信。该

soname
会更可能是
libmy.so.2
这样,你可以做轻微的更新到
2.x
流并获得最新的行为。



欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/zaji/5006193.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-11-14
下一篇 2022-11-14

发表评论

登录后才能评论

评论列表(0条)

保存