庫檔案在串連(靜態庫和共用庫)和運行(僅限於使用共用庫的程式)時被使用,其搜尋路徑是在系統中進行設定的。一般 Linux 系統把 /lib 和 /usr/lib 兩個目錄作為預設的庫搜尋路徑,所以使用這兩個目錄中的庫時不需要進行設定搜尋路徑即可直接使用。對於處於預設庫搜尋路徑之外的庫,需要將庫的位置添加到 庫的搜尋路徑之中。設定庫檔案的搜尋路徑有下列兩種方式,可任選其一使用:
1. 在環境變數 LD_LIBRARY_PATH 中指明庫的搜尋路徑。
2. 在 /etc/ld.so.conf 檔案中添加庫的搜尋路徑。
將自己可能存放庫檔案的路徑都加入到/etc/ld.so.conf中是明智的選擇
添加方法也極其簡單,將庫檔案的絕對路徑直接寫進去就OK了,一行一個。例如:
/usr/X11R6/lib
/usr/local/lib
/opt/lib
需要注意的是:第二種搜尋路徑的設定方式對於程式串連時的庫(包括共用庫和靜態庫)的定位已經足夠了,但是對於使用了共用庫的程式的執行還是不 夠的。這是因為為了加快程式執行時對共用庫的定位速度,避免使用搜尋路徑尋找共用庫的低效率,所以是直接讀取庫列表檔案 /etc/ld.so.cache 從中進行搜尋的。/etc/ld.so.cache 是一個非文本的資料檔案,不能直接編輯,它是根據 /etc/ld.so.conf 中設定的搜尋路徑由 /sbin/ldconfig 命令將這些搜尋路徑下的共用庫檔案集中在一起而產生的(ldconfig 命令要以 root 許可權執行)。因此,為了保證程式執行時對庫的定位,在 /etc/ld.so.conf 中進行了庫搜尋路徑的設定之後,還必須要運行 /sbin/ldconfig 命令更新 /etc/ld.so.cache 檔案之後才可以。ldconfig ,簡單的說,它的作用就是將/etc/ld.so.conf列出的路徑下的庫檔案快取到/etc/ld.so.cache 以供使用。因此當安裝完一些庫檔案,(例如剛安裝好glib),或者修改ld.so.conf增加新的庫路徑後,需要運行一下 /sbin/ldconfig使所有的庫檔案都被緩衝到ld.so.cache中,如果沒做,即使庫檔案明明就在/usr/lib下的,也是不會被使用 的,結果編譯過程中抱錯,缺少xxx庫,去查看發現明明就在那放著,搞的想大罵computer蠢豬一個。
在程式串連時,對於庫檔案(靜態庫和共用庫)的搜尋路徑,除了上面的設定方式之外,還可以通過 -L 參數顯式指定。因為用 -L 設定的路徑將被優先搜尋,所以在串連的時候通常都會以這種方式直接指定要串連的庫的路徑。
前面已經說明過了,庫搜尋路徑的設定有兩種方式:在環境變數 LD_LIBRARY_PATH 中設定以及在 /etc/ld.so.conf 檔案中設定。其中,第二種設定方式需要 root 許可權,以改變 /etc/ld.so.conf 檔案並執行 /sbin/ldconfig 命令。而且,當系統重新啟動後,所有的基於 GTK2 的程式在運行時都將使用新安裝的 GTK 庫。不幸的是,由於 GTK 版本的改變,這有時會給應用程式帶來相容性的問題,造成某些程式運行不正常。為了避免出現上面的這些情況,在 GTK 及其依賴庫的安裝過程中對於庫的搜尋路徑的設定將採用第一種方式進行。這種設定方式不需要 root 許可權,設定也簡單:
$ export LD_LIBRARY_PATH=/opt/gtk/lib:$LD_LIBRARY_PATH
可以用下面的命令查看 LD_LIBRAY_PATH 的設定內容:
$ echo $LD_LIBRARY_PATH
至此,庫的兩種設定就完成了。
[轉] http://blog.csdn.net/shendl/article/details/5675396