Symlink
/usr/lib vs /etc/ld.so.conf.d
TL;DR為什麼將符號連結放置到共享庫更好,
/etc/lib(64)/
或者為什麼在其中創建 *.conf 文件更好/etc/ld.so.conf.d/
.conf 文件
假設我有我的自定義二進製文件
/opt/foo/
,附帶它自己的共享庫。常見的方法(我知道)是將文件放置在/etc/ld.so.conf.d/foo.conf
如下位置:# Link foo libraries. This file is included in /etc/ld.so.conf /opt/foo/lib /opt/foo/otherlibs
然後執行
ldconfig
。符號連結
但我發現我也可以
/usr/lib
像這樣將我的庫連結到(或 lib64):for f in /etc/foo/{lib,otherlibs}/*; do ln -s $f /usr/lib64/$(basename $f) done
然後我就不用跑
ldconfig
了。這兩種方式的優缺點是什麼?
我可以想像在升級應用程序或庫版本時,“符號連結”方式不是很好處理。一般來說,“.conf”方式對我來說似乎更模組化和更 Linux-ish。
我偶爾會遇到這種情況,因為我們必須加密(並且僅在執行時解密)特定庫。
ldconfig
加密時無法辨識庫(仍為 ELF 格式),因此對我來說唯一合適的方法是將指向特定 *.so 文件的連結放在/usr/lib64
作為一般規則,
/usr
除了/usr/local
“屬於”您的分配之外的所有內容。您應該避免在那裡添加文件(甚至是符號連結)。添加新的配置文件
/etc/ld.so.conf.d
更易於維護:您的更改不會被包管理器撤消,但任何系統管理員都可以輕鬆管理它們。以乾淨的方式解決您的加密要求將更加複雜;一種方法可能是在由 in 中的文件指定的目錄中擁有一個存根庫,
/etc/ld.so.conf.d
並讓它在執行時負責解密。