linux管理 共享庫檔案

2021-07-02 12:31:34 字數 1972 閱讀 7327

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

在 linux 下面,共享庫的尋找和載入是由 /lib/ld.so 實現的。

1、標準庫檔案路徑

ld.so在標準路經(/lib, /usr/lib) 中尋找應用程式用到的共享庫。

//往/lib和/usr/lib裡面加東西,是不用修改/etc/ld.so.conf的,

///但是完了之後要調一下ldconfig,不然這個library會找不到

2、非標準庫檔案路徑

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

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

/想往標準兩個目錄以外加東西的時候,一定要修改/etc/ld.so.conf,然後再呼叫ldconfig,不然也會找不到庫檔案。比如安裝了乙個mysql到/usr/local/mysql,mysql有一大堆library在/usr/local/mysql/lib下面,這時就需要在/etc/ld.so.conf下面加一行/usr/local/mysql/lib,儲存過後ldconfig一下,新的library才能在程式執行時被找到。

(2)傳統上,還有一種臨時的解決方案

,linux 的先輩 unix 還有乙個環境變數:ld_library_path 來處理非標準路經的共享庫。ld.so載入共享庫的時候,也會查詢這個變數所設定的路經。

ld_library_path=$ld_library_path:./lib

export ld_library_path

///export乙個全域性變數ld_library_path,然後執行程式的時候就會去這個目錄中找library。

如果想在這兩個目錄以外放lib,但是又不想在/etc/ld.so.conf中加東西(或者是沒有許可權加東西).那也可以,就是export乙個全域性變數ld_library_path,然後執行程式的時候就會去這個目錄中找library。

///一般來講這只是一種臨時的解決方案,在沒有許可權或臨時需要的時候使用。

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

* ld_library_path is not the answer -

* why ld_library_path is bad -

* ld_library_path - just say no -

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

(3)永久解決方案

接下來的問題是:以上做法,只是臨時設定變數ld_library_path,下次開機,一切設定將不復存在;如何把這個值永久寫到 ld_library_path 裡呢?

我們可以在~/.bashrc或者~/.bash_profile中加入 export 語句,前者在每次登陸和每次開啟 shell 都讀取一次,後者只在登陸時讀取一次。我的習慣是加到~/.bashrc中,在該檔案的未尾,可採用如下語句來使設定生效:

export ld_library_path=$ld_library_path:/usr/local/lib

修改完後,記得關掉當前終端並重新開啟乙個新的終端,從而使上面的配置生效。

3. 查詢優先順序如下(linux):

① ld_library_path 環境變數指定目錄

② /etc/ld.so.conf指定目錄

③ 標準路徑 先/usr/lib 再 /lib

Linux 共享函式庫的管理

共享函式庫分為靜態鏈結庫和動態鏈結庫。靜態鏈結的好處,是程式被搬移到另乙個同質系統而不必重新編譯,就可順利執行 缺點是它們的體積比較龐大,需要較多記憶體。動態鏈結庫的優缺點剛好與靜態鏈結庫互補,所浪費記憶體較少 特別是同時執行多個動態鏈結的程式且它們共享許多通用函式時 但是如果將檔案搬移到另乙個系統...

linux 實現共享檔案共享

linux和winxp資訊共享 samba伺服器的安裝和配置 步驟 1 查詢是否安裝了samba服務 rpm q samba rpm qa grep samba service smb start 2 安裝samba a 掛載映象 mount t iso9660 iso mymedia o loop...

Linux 檔案共享

使用linux難免會與其他平台進行檔案交換 共享。這裡整了一些具體的方法。linux 安裝在虛擬機器的話,與windows共享檔案最方便的當數共享資料夾。virtualbox 設定共享資料夾 參考 安裝openssh server get install openssh server 檢視是否安裝成...