Ubuntu
apt-get 似乎沒有正確安裝庫包
最近我用 安裝了庫
liblz4.so
,apt-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
.