那么 soname 冲突是否仅发生在名称以“lib”开头的软件包中?
Debian 政策讲述运行时共享库:
通常情况下,运行时共享库及其 SONAME 符号链接应放置在名为 librarynamesoversion 的包中,其中 soversion 是共享库 SONAME 中的版本号。或者,如果直接将 soversion 附加到 libraryname 会造成混淆(例如,如果 libraryname 本身以数字结尾),则应改用 libraryname-soversion。
但是所有库名都以“lib”开头吗?
答案1
请看这个Stack Overflow 问答了解更多信息。
一般来说,这是一个习俗在类 Unix 系统中,共享库随附lib
(GCC 链接器默认查找这些文件)。
但这仅适用于文件本身。此类共享文件可以包含在其他包中(可按作者的喜好命名),也可以包含在专用包中,专用包很可能也以约定俗成的方式命名(以 开头lib
)。
一般来说,由于这不是一个严格的规则,您很可能会发现违反惯例的例子。但在大多数情况下,带有共享库的专用软件包将以 开头lib
,遵循命名惯例。
至于 soname 变更,这只会在进行向后不兼容的更改时发生。例如,在 Ubuntu 22.04 中,OpenSSL 升级到 v. 3.0.2,而 的 soname 也libssl
升级到libssl.so.3
。
但对于官方库来说,这种情况不会在 Ubuntu 版本发布期间发生,而是从一个版本到另一个版本。但是,无法判断某些第三方开发人员是否决定发布库的新主要版本,从而导致 soname 冲突。