1. 程式人生 > >動態連結庫的路徑配置-rpath/ld.so.conf/LD_LIBRARY_PATH

動態連結庫的路徑配置-rpath/ld.so.conf/LD_LIBRARY_PATH

存放庫檔案到指定目錄,使可執行程式能夠找到庫檔案有三種方法:

第一種,通過ldconfig命令
    ldconfig命令的用途, 主要是在預設搜尋目錄(/lib和/usr/lib)以及動態庫配置檔案/etc/ld.so.conf內所列的目錄下, 搜尋出可共享的動態連結庫(格式如lib*.so*), 進而創建出動態裝入程式(ld.so)所需的連線和快取檔案. 快取檔案預設為/etc/ld.so.cache, 此檔案儲存已排好序的動態連結庫名字列表. 
    這裡面涉及到的關鍵內容有命令:ldconfig,配置檔案目錄:/etc/ld.so.conf.d,配置檔案在/etc/ld.so.conf內容由使用者編輯,緩衝檔案/etc/ld.so.cache。下面舉個例子,比如你在部署軟體時,有些動態庫安裝在exe目錄下,可以通過如下方法實現,
1)配置exe.conf檔案,裡面加一行~/exe,然後將該檔案放到/etc/ld.so.conf.d目錄下;
2)在/etc/ld.so.conf檔案中增加一行include ld.so.conf.d/exe.conf
3)執行 ldconfig命令
之後程式執行時,會自動增加在exe目錄中搜索動態庫。
第二種,通過LD_LIBRARY_PATH環境變數
可以通過在.bashrc( Bash ShELL 的配置檔案

https://blog.csdn.net/knowledgebao/article/details/84566099)或者.cshrc(C SHELL 的配置檔案)中配置該環境變數,LD_LIBRARY_PATH的意思是告訴loader在哪些目錄中可以找到共享庫. 可以設定多個搜尋目錄, 這些目錄之間用冒號分隔開.

同樣是上面的例子,可以通過以上的方法來實現
在.bashrc或.cshrc中增加一行,export LD_LIBRARY_PATH = ~/exe:$LD_LIBRARY_PATH即可。

第三種,通過編譯選項-Wl, -rpath指定動態搜尋的路徑
    -Wl選項告訴編譯器將後面的引數傳遞給連結器。
    通過上面的介紹,對/etc/ld.so.conf.d/的作用就比較清晰了。


/etc/ld.so.conf:系統預設動態連結庫的路徑

/etc/ld.so.conf.d/*.conf:系統預設動態連結庫的路徑

ldconfig:使/etc/ld.so.conf生效

LD_LIBRARY_PATH:ld連結器將優先在該變數設定的路徑中查詢,若未找到則在/etc/ld.so.cache尋找。

/etc/ld.so.conf記錄系統預設動態連結庫的路徑,其中第一句include ld.so.conf.d/*.conf表示/etc/ld.so.conf.d/*.conf下的所有檔案都作為/etc/ld.so.conf的內容。也就是說你新增搜尋路徑的時候,可以直接在/etc/ld.so.conf增加,或者在/etc/ld.so.conf.d目錄下增加一個以.conf結尾的檔案。

程式執行時,會預設從/etc/ld.so.conf記錄的路徑下尋找依賴庫。

ldconfig程式的目的是使對/etc/ld.so.conf生效。修改完/etc/ld.so.conf需要執行ldconfig命令。ldconfig使所有的庫檔案都被快取到ld.so.cache中。實際程式只會從ld.so.cache中尋找依賴庫檔案。

如果你給系統目錄下安裝了新的so庫,需要執行一遍ldconfig命令,否則即使庫存在,由於沒載入到ld.so.cache中而無效。