库版本、API 版本和 soname:这些应该如何命名?

库版本、API 版本和 soname:这些应该如何命名?

libfoo假设我有一个名为and 的库

  • 它的版本是0.4.2
  • 0.4API 版本在哪里?
  • 2是可能添加新的API函数的版本号。

soname 应该是libfoo.so.0.4libfoo.so.0.4.2还是其他什么?

答案1

如果 api 版本是0.4,并且与其他0.*版本不兼容,那么您应该将 soname 设置为libfoo.so.0.4。实际上soname可以是任何字符串,只需要在加载可执行文件时在系统中找到合适的共享库即可。

许多软件包(或发行版)遵循与您不同的命名方案。例如,0.4.2带有 api 的libfoo 版本0.4将变成libfoo.so.4.2带有 soname libfoo.4

当对界面进行重大更改时,不仅需要重新编译和到处修正,还需要使用库重写代码 - 通过重命名库来提高“主要”主要版本。然后当版本从到 时libfoo.4.2变成。libfoo-1.so.0.10.4.21.0.1

如果某些旧软件尚未重写为全新的 api,这种方案可以更轻松地安装库的多个版本。

答案2

通常您创建文件 libfoo.so.0.4.2 和符号链接 libfoo.so.0 -> libfoo.so.0.4.2

相关内容