libfoo.so.-6ren">
gpt4 book ai didi

shared-libraries - 为什么 libtool 的 "current"在 BSD 上用作 "SOVERSION"而不是 "major"?

转载 作者:行者123 更新时间:2023-12-03 23:38:53 29 4
gpt4 key购买 nike

在类 Unix 系统上,动态共享库(.so 文件)有一个 SONAME .
它可以提取例如:readelf -a libfoo.so.0.3.2 | grep SONAME -> libfoo.so.0 .
最后一部分也称为 SOVERSION .
该版本号标记了二进制兼容 (ABI) 的库版本。
因此,当程序链接到库的一个版本时,如果 SOVERSION,它也可以使用更高版本的库。不会改变。

Libtool有一个 -version-info决定这种机制的机制 SOVERSIONcurrent , revisionage .
线索是:current也增加了兼容的变化和 major = current - age在大多数系统上用于设置 SOVERSION .

但是,在 BSD(FreeBSD、NetBSD、OpenBSD)上,SOVERSION设置为 current ,这在几个地方提到,比如
suse-wiki ,
我也在提到的平台上对此进行了测试。

问题是:为什么 libtool 在 BSD 上这样做?
为什么这被认为是“BSD 这样做的方式”?

这意味着 Linux/Darwin/SunOS 的每个兼容更改对于 BSD 都是不兼容的更改,因为 SOVERSION变化。

最佳答案

据至少一位在 GNU 邮件列表上发帖的开发人员称,这可能被认为是一个错误:

https://lists.gnu.org/archive/html/bug-libtool/2011-05/msg00007.html

那封电子邮件还充满了对各种 BSD 的库版本控制策略的有用引用,这似乎与 libtool 的行为相矛盾

关于shared-libraries - 为什么 libtool 的 "current"在 BSD 上用作 "SOVERSION"而不是 "major"?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15215898/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com