關於ubuntu新增共享庫路徑:
1. 將絕對路徑寫入 /etc/ld.so.conf
2. ldconfig
庫檔案在連線(靜態庫和共享庫)和執行(僅限於使用共享庫的程式)時被使用,其搜尋路徑是在系統中進行設定的。一般 linux 系統把 /lib 和 /usr/lib 兩個目錄作為預設的庫搜尋路徑,所以使用這兩個目錄中的庫時不需要進行設定搜尋路徑即可直接使用。對於處於預設庫搜尋路徑之外的庫,需要將庫的位置新增到 庫的搜尋路徑之中。設定庫檔案的搜尋路徑有下列兩種方式,可任選其一使用:
在環境變數 ld_library_path 中指明庫的搜尋路徑。
在 /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下的,也是不會被使用 的,結果編譯過程中抱錯,缺少***庫,去檢視發現明明就在那放著,搞的想大罵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
至此,庫的兩種設定就完成了。
Linux共享庫路徑配置
分類 linux 2012 12 18 22 27 3060人閱讀收藏 舉報 linux下找不到共享庫檔案的典型現象為明明已經安裝某個軟包 如libnet,mysql 編譯鏈結可以正常進行,但是在執行時出現如 error while loading shared libraries libnet.s...
ubuntu共享庫檔案缺失
開啟 opt qcom qxdm qxdm,提示 qxdm error while loading shared libraries libgstreamer 0.10.so.0 cannot open shared object file no such file or directory解決方案...
ubuntu新增第三方python庫路徑
python的第三方庫的 安裝方式 pip工具管理 例 mkdir home miracle libtest 建自己的庫目錄 gedit home miracle libtest test.py 編寫庫檔案,內容如下 def testprint print 匯入成功!寫入 pt 件 sudo ged...