Debian

為什麼libinput打包成libinput10?

  • December 2, 2021

我正在 linuxtouchpad.org 上為觸摸板黑客編寫文件,我試圖解釋哪個 debian 包具有 libinput 的建構依賴項(即是它sudo apt build-dep libinput還是sudo apt build-dep libinput10?)

為什麼我們甚至有一個libinput10?我在debian 版本中看到了舊libinput5deb 包的證據。當其他 libinput 包(例如and )沒有時,jessie為什麼 libinput會出現版本提升?X``libinput-bin``libinput-dev

libinput源庫本身的最新版本1.19.2似乎與“5”或“10”後綴無關。

Debian 使用的打包工具(dpkg)不支持同時安裝同一個包的多個版本。因此,要安裝同一軟體的多個版本,每個版本都必須位於具有不同名稱的包中。

必須可以安裝同一個共享庫的多個版本,因為使用該庫的不同程序是針對該庫的不同版本建構的。即使在給定的時間點,所有使用 libinput 的程序都是針對版本 10 建構的,這也不會永遠如此。當版本 11 發佈時,必須可以將它與版本 10 一起安裝,因為並非所有使用該庫的程序都會立即重建。

此約束不適用於大多數不是共享庫的包。沒有理由同時安裝不同版本/lib/udev/libinput*,因此無需libinput-bin安裝多個版本。libinput-dev如果您想為多個版本的 建構程序的二進製文件,您只需要同時安裝多個版本libinput,這不是 Debian 試圖通過其打包來支持的東西。

由於每當庫以不兼容的方式更改時庫包都需要更改,Debian 將庫包名稱的約定定義為庫的名稱後跟一個數字,每當庫以舊二進製文件可以更改的方式更改時,該數字就會更改t 使用新庫。換句話說,庫包版本號必須在ABI更改時更改。

根據上游的版本編號約定,ABI 更改可能與庫版本號中的模式相對應,也可能不對應。有一個非常普遍(但不是普遍)的約定,即當API以不兼容的方式更改時主要版本號會更改,並且 API 更改幾乎總是意味著 ABI 更改,但許多 ABI 更改不涉及不兼容的 API 更改。如果是由於另一個庫中的更改,ABI 甚至可以在庫中沒有任何更改的情況下更改。

庫文件本身包含一個名稱,該名稱會在庫以不兼容的方式更改時發生更改:soname。這個唯一的名稱是動態載入器選擇正確版本的方式。雖然它不是強制性的,但大多數庫使用的 soname 的形式libfoo.so.N是其中 N 是一個整數,每次 ABI 以不兼容的方式更改時都會更改。Debian 上的 Libinput 遵循這個約定,N 的目前值為 10。

$ readelf -d /usr/lib/x86_64-linux-gnu/libinput.so.10.13.0 | grep SONAME
0x000000000000000e (SONAME)             Library soname: [libinput.so.10]

.10當 ABI 以不兼容的方式更改時,該部分會更改。.13.0當 ABI 以向後兼容的方式更改時,該部分會更改。

有關更多資訊,請參閱:

引用自:https://unix.stackexchange.com/questions/679906