Ubuntu

apt-get 似乎沒有正確安裝庫包

  • August 15, 2020

最近我用 安裝了庫liblz4.soapt-get install liblz4-1但我注意到上面的命令只安裝這些文件/連結:

/usr/lib/x86_64-linux-gnu/liblz4.so.1.7.1
/usr/lib/x86_64-linux-gnu/liblz4.so.1 -> liblz4.so.1.7.1

我的理解是,在 Ubuntu 中,庫名稱可能包含庫版本,但必須始終有指向其中一個不包含它的文件的連結,以便ld其他二進製文件/庫可以找到它。在上面的例子中,這樣的連結是/usr/lib/x86_64-linux-gnu/liblz4.so -> liblz4.so.1.7.1. 但是,apt-get尚未創建此連結,我需要自己創建它。

這是包中的“失敗”liblz4還是某些 Ubuntu 包中的預期?有沒有更好的安裝方法(不需要手動創建連結)?

來自Debian 政策手冊,其中規定:

將二進製文件或其他共享庫連結到共享庫時,該共享庫的 SONAME 尚不清楚。相反,通過查找與庫名稱匹配並附加 .so 的文件來找到共享庫。該文件作為指向共享庫的符號連結存在於文件系統中。

共享庫通常分為幾個二進制包。SONAME 符號連結由執行時共享庫包安裝,而裸露的 .so 符號連結安裝在開發包中,因為它僅在連結二進製文件或共享庫時使用。

因此,在liblz4-1包含執行時庫的包中,您擁有liblz4.so.1.7.1可供已編譯的二進製文件使用的包,而在開發包中liblz4-dev,您擁有liblz4.so允許連結器在編譯它們時嵌入正確引用的符號連結。

liblz4-dev包依賴於執行時包的目前版本,因此符號連結不會懸空,並且當發行版發布對庫的更新(需要更改SOVERSION.

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