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 變數,尤其是作為全域性變數。這些聲音是:
* ld_library_path is not the answer -
* why ld_library_path is bad -
* ld_library_path - just say no -
Linux動態庫的查詢路徑
前兩天寫了乙個動態庫,然後試圖編譯到程式裡面去執行,結果發現編譯的時候通過gcc的 l引數來指定路徑僅僅能讓編譯通過,執行時還是會出問題的。比如下面這個例子 main.c是主程式,sum.c中間含有乙個函式add,用來執行加法,如下 1 2 main.c3 4 include 5 6int add ...
Linux動態庫的查詢路徑
前兩天寫了乙個動態庫,然後試圖編譯到程式裡面去執行,結果發現編譯的時候通過gcc的 l引數來指定路徑僅僅能讓編譯通過,執行時還是會出問題的。比如下面這個例子 main.c是主程式,sum.c中間含有乙個函式add,用來執行加法,如下 1 2 main.c3 4 include 5 6int add ...
Linux動態庫的查詢路徑
上頭需要把專案從windows系統移動到linux下,作為對linux半吊子的我卻無意承擔了這個工作,從此填坑深如海。原專案實在msvc qt開發的,還好qt是跨平台的,但是windows和linux的執行還是有所差距的。以下記錄linux下動態庫的搜尋路徑,多數內容來自csdn中的其他大神。這個過...