1. 程式人生 > >Linux 共享庫管理:ld.so.conf 與 LD_LIBRARY_PATH

Linux 共享庫管理:ld.so.conf 與 LD_LIBRARY_PATH

Linux 執行的時候,是如何管理共享庫(*.so)的?

在 Linux 下面,共享庫的尋找和載入是由 /lib/ld.so 實現的。 ld.so 在標準路經(/lib, /usr/lib) 中尋找應用程式用到的共享庫。

但是,如果需要用到的共享庫在非標準路經,ld.so 怎麼找到它呢?

目前,Linux 通用的做法是將非標準路經加入 /etc/ld.so.conf,然後執行 ldconfig 生成 /etc/ld.so.cache。 ld.so 載入共享庫的時候,會從 ld.so.cache 查詢。

傳統上,Linux 的先輩 Unix 還有一個環境變數:LD_LIBRARY_PATH 來處理非標準路經的共享庫。ld.so 載入共享庫的時候,也會查詢這個變數所設定的路經。

LD_LIBRARY_PATH=$LD_LIBRARY_PATH:./lib

export LD_LIBRARY_PATH

但是,有不少聲音主張要避免使用 LD_LIBRARY_PATH 變數,尤其是作為全域性變數。

解決這一問題的另一方法是在編譯的時候通過 -R 選項指定 run-time path。