libfoo
假设我有一个名为and 的库
- 它的版本是
0.4.2
0.4
API 版本在哪里?2
是可能添加新的API函数的版本号。
soname 应该是libfoo.so.0.4
,libfoo.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.1
0.4.2
1.0.1
如果某些旧软件尚未重写为全新的 api,这种方案可以更轻松地安装库的多个版本。
答案2
通常您创建文件 libfoo.so.0.4.2 和符号链接 libfoo.so.0 -> libfoo.so.0.4.2