Linux 动态库中的数字后缀是什么意思?

hou*_*oft 9 linux numbering libraries

下面是一个例子:

~$ ls /lib/*.so* | head -n 10
/lib/ld-2.13.so
/lib/ld-Linux.so.2
/lib/libacl.so
/lib/libacl.so.1
/lib/libacl.so.1.1.0
/lib/libanl-2.13.so
/lib/libanl.so.1
/lib/libattr.so
/lib/libattr.so.1
/lib/libattr.so.1.1.0
Run Code Online (Sandbox Code Playgroud)

后面的数字so(例如最后一行)1.1.0是什么意思?

我的第一个猜测是它们是版本号,但是:

~$ pacman -Qo /lib/libattr.so*
/lib/libattr.so is owned by attr 2.4.46-1
/lib/libattr.so.1 is owned by attr 2.4.46-1
/lib/libattr.so.1.1.0 is owned by attr 2.4.46-1
Run Code Online (Sandbox Code Playgroud)

所以1.1.0似乎与库的版本没有任何联系,据报道是2.4.46.

Dar*_*oid 8

它们是不同版本的库。不同的应用程序可能需要不同的版本,因此每个文件都包含版本名称,这样它们就可以同时安装。你会发现,如果没有版本号的那些实际上指向具有通过一个符号链接版本号的那些之一,使应用程序并不需要特定版本,可以简单地要求没有版本号库,并获得最新系统上安装的版本。

  • 文件的版本号可能只有在破坏二进制兼容性时才会增加,即它们有不同的 API 供程序使用。这不会随着错误修正而改变,这仍然会导致包版本增加。因此,包版本的增长速度比库 API 版本快。无论如何,这是我对此事的猜测。 (5认同)