為什麼 /usr/local/lib 預設不在庫路徑上?
在FHS下,系統包(例如 RPM)將庫安裝到
/usr/lib
(或/usr/lib64
)。同樣,使用舊的“”常式編譯的庫configure;make;make install
,不屬於系統分發的一部分,預設安裝到/usr/local/lib
(或/usr/local/lib64
)。通常,要求使用者更改 LD_LIBRARY_PATH 或
ld.so.conf
他們安裝的應用程序被認為是一種不好的形式。參見例如:http://web.archive.org/web/20060719201954/http://www.visi.com/~barr/ldpath.html
但是,不應該
/usr/local/lib
是這條規則的例外嗎?如果是這種情況,為什麼
/usr/local/lib
預設情況下沒有很多/大多數發行版包含在庫搜尋路徑中?到目前為止,似乎只有 ArchLinux 認為這是錯誤,請參閱http://bugs.archlinux.org/task/20059?project=1&opened=2263 和相關的http://bbs.archlinux.org/viewtopic.php?id =99807
/usr/local/lib
對於需要將庫包含/usr/local/lib
在其 RPATH 中的應用程序或期望作業系統已經具有該設置的應用程序是否更正確?我不喜歡在 RPATH 中使用任何不基於 $ORIGIN 的東西的想法。這不是迂腐的問題,因為它對系統穩定性和軟體的打包方式有影響。
有人建議 /usr/local/lib 應該在預設路徑上,並且它應該被視為 Linux 變體(如 Red Hat)中的“錯誤”,而它不是。
這個答案https://stackoverflow.com/a/17653893 指出了http://linuxmafia.com/faq/Admin/ld-lib-path.html的突出部分
許多 Red Hat 派生的發行版通常不在 /etc/ld.so.conf 文件中包含 /usr/local/lib。我認為這是一個錯誤,將 /usr/local/lib 添加到 /etc/ld.so.conf 是在 Red Hat 派生系統上執行許多程序所需的常見“修復”。
我向 Red Hat 提出了這個問題,現在我不同意。
在供應商確實安裝到 /usr/local 的系統上,Red Hat 提供的軟體包永遠不會安裝到 /usr/local,答案是不同的。在這些系統上,可以合理地預期 /usr/local/lib 位於預設搜尋路徑上。
Red Hat 指出 /usr/local/lib 不應該在預設搜尋路徑上,因為任何添加到那裡的庫都可能被 RPM 和 yum 拾取。
我對此進行了進一步調查。如果您在 /usr/local/lib 中安裝您自己的系統庫版本,那麼它可以滿足您通常通過 RPM 或 yum 安裝的另一個系統包的依賴關係。顯然這會影響系統穩定性。更糟糕的是,它會做得非常微妙。yum check 可能會報告您擁有所需的所有軟體包的所有供應商版本,而不會注意到您在 /usr/local/lib 中擁有自己的重要版本。
在使用不同包管理器的系統上,這可能不適用。
對於要在 RPATH 中放入什麼,我沒有完整的答案。但是,我認為您應該避免依賴 /usr/local/lib 中的庫,而是盡可能將它們安裝到 /opt(即作為安裝的一部分由您控制的地方)。