为什么这个 SO(共享对象)以 .3gf 结尾?

为什么这个 SO(共享对象)以 .3gf 结尾?

在 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.3libblas3gflibblas.so.3gf

在2011年,Debian 停止维护该库的单独版本。 (据我了解,Debian 的更改或类似的内容已合并到上游,因此 3gf 版本的未来版本libblas3拥有 3gf 版本所具有的一切。)因此 3gf 版本已过时,但该.so文件仍然可用于运行现有的已编译版本程式。向后兼容性别名花了几年时间才被删除。 Ubuntu 18.04 仍然有它们,但 Ubuntu 20.04 不再有它们。

相关内容