為什麼libinput打包成libinput10?
我正在 linuxtouchpad.org 上為觸摸板黑客編寫文件,我試圖解釋哪個 debian 包具有 libinput 的建構依賴項(即是它
sudo apt build-dep libinput
還是sudo apt build-dep libinput10
?)為什麼我們甚至有一個
libinput10
?我在debian 版本中看到了舊libinput5
deb 包的證據。當其他 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 以向後兼容的方式更改時,該部分會更改。有關更多資訊,請參閱: