1. 程式人生 > 實用技巧 >OS-Linux-動態連結檔案設定環境變數-/etc/ld.so.conf ldconfig ldd

OS-Linux-動態連結檔案設定環境變數-/etc/ld.so.conf ldconfig ldd

OS-Linux-動態連結檔案設定環境變數-/etc/ld.so.conf ldconfig ldd

October 22, 2020 8:22 PM
現象:在Linux下,用sh指令碼可以啟動的程式使用pytest的時候提示xxx.so檔案不存在
原因:so不在環境變數中,pytest查詢時無法查詢到
解決方法:配置Linux的ld.so.conf檔案
具體步驟:

1. vi  /etc/ld.so.conf
2. 在檔案最後加入so的檔案路徑,使用絕對路徑
3. 儲存退出
4. ldconfig

原理

參照 動態裝入器(dynamic loader)

動態裝入器(dynamic loader)負責將動態可執行程式和所有必需的共享庫一起裝入,以使它們能正確執行。
/lib64/ld-linux-x86-64.so.2 即是64位linux系統下的動態裝入器

動態裝入器找到共享庫要依靠兩個檔案 —— /etc/ld.so.conf和 /etc/ld.so.cache。

ld.so.conf 檔案包含一個所有目錄(/lib 和 /usr/lib 除外,它們會自動包含在其中)的清單,動態裝入器將在其中查詢共享庫。
但是在動態裝入器能“看到”這一資訊之前,必須將它轉換到 ld.so.cache 檔案中。可以通過執行 ldconfig 命令做到這一點,當 ldconfig 操作結束時,您會有一個最新的 /etc/ld.so.cache 檔案,它反映您對 /etc/ld.so.conf 所做的更改。從這一刻起,動態裝入器在尋找共享庫時會檢視您在 /etc/ld.so.conf 中指定的所有新目錄。

$ldconfig
LD_LIBRARY_PATH
  要指示動態裝入器首先檢查某個目錄,請將 LD_LIBRARY_PATH 變數設定成您希望搜尋的目錄。多個路徑之間用冒號分隔;例如:
  $ export LD_LIBRARY_PATH=”/usr/lib/old:/opt/lib”
  匯出 LD_LIBRARY_PATH 後,如有可能,所有從當前 shell 啟動的可執行程式都將使用 /usr/lib/old 或 /opt/lib 中的庫,如果仍不能滿足一些共享庫相關性要求,則轉回到 /etc/ld.so.conf 中指定的庫。

$ldd命令檢視程式依賴的動態庫,可以判斷是否有動態庫缺失
ldd [程式名]