在 ubuntu trusty tahr 上,当我libblas3
从存储库安装时,它会在/usr/lib/libblas.so.3gf
.在焦点窝下,它的行为不同并安装在/usr/lib/x86_64-linux-gnu/libblas.so.3
.我假设后者遵循 libtool 版本控制这个答案。但是我找不到有关这个旧.3gf
文件扩展名的任何信息。它位于libblas.so.3
和旁边libblas.so
。代表什么.3gf
?
答案1
通常,共享库带有一个文件和两个符号链接:
- 该文件
libfoo.so.1.2.3
(后面有多个数字.so
)以作为软件项目的库的版本命名。它不直接使用,只能通过两个符号链接之一使用。 - 符号链接
libfoo.so.V
(后面有一个数字.so
)以“soversion”(共享对象版本)命名。每次库中出现不兼容的更改时,版本都会更改ABI。程序与库的特定版本链接。如果您有针对不同版本的库构建的程序,则可以安装具有不同版本的不同版本的库。 - 符号
libfoo.so
(后面没有数字.so
)是您安装的开发文件(标头、静态库)的版本。如果您编译一个程序,它将与指向的任何版本链接libfoo.so
(最好与头文件兼容)。
文件名中的 soversion 通常是一个整数,每次出现不兼容的更改时该整数都会递增,但并非必须如此。
一段时间以来,Debian 维护了两个 API 不兼容的 BLAS 库版本:libblas3
与上游项目的 API 和libblas3gf
与“C 接口的一些小改动”。为与上游 API 链接的程序libblas3
安装的软件包以及为与 Debian API 链接的程序安装的软件包。libblas.so.3
libblas3gf
libblas.so.3gf
在2011年,Debian 停止维护该库的单独版本。 (据我了解,Debian 的更改或类似的内容已合并到上游,因此 3gf 版本的未来版本libblas3
拥有 3gf 版本所具有的一切。)因此 3gf 版本已过时,但该.so
文件仍然可用于运行现有的已编译版本程式。向后兼容性别名花了几年时间才被删除。 Ubuntu 18.04 仍然有它们,但 Ubuntu 20.04 不再有它们。