(更新1)ubuntu下的動態連結庫(.so )問題(以opencv為例)
首先需要指出,如果你的shell已經是root管理情況,那就直接按照轉載的方法執行就可以了。
如果你是非root的正常訪問模式,那就在執行每一條指令的最開始加入sudo,以下為非root模式。
例如,需要配置opencv的動態連結庫,那首先開啟目錄
cd /etc/ld.so.conf
然後,新建一個名為opencv.conf的檔案,並在檔案裡新增你所安裝的opencv的動態庫絕對路徑,可以是多個路徑
sudo gedit opencv.conf
如果你沒有安裝gedit請先安裝,如果你在該路徑下沒有opencv.conf檔案,上一條指令會直接新建,有的話就會直接用gedit開啟。開啟後,在裡面新增路徑並儲存(Ctrl+s),注意是絕對路徑
/usr/lib
/XX/XX/XX/lib
這裡/XX/XX/XX/lib表示任意的路徑。最後,在shell中執行sudo ldconfig即可
除此之外,還有一種方法,就是在你需要執行指令的終端shell里加入臨時的環境變數,例如 export LD_LIBRARY_PATH=/home/xxx/artoolkitx-master/Source/depends/linux/lib:$LD_LIBRARY_PATH ldconfig其中$LD_LIBRARY_PATH表示你已經有的庫路徑,冒號:是分隔符,/home/xxx/artoolkitx-master/Source/depends/linux/lib表示你現在需要的路徑。之後,我們可以通過echo $LD_LIBRARY_PATH來檢視當前的環境變數,千萬記住,這個只是臨時的,意味著你以後要用的任何時候,只要開啟了新的終端,就必須重新新增一次.
以上做法,只是臨時設定變數 LD_LIBRARY_PATH ,下次開機,一切設定將不復存在;把這個值持續寫到 LD_LIBRARY_PATH 裡可以在 ~/.bashrc 或者 ~/.bash_profile 中加入 export 語句,前者在每次登陸和每次開啟 shell 都讀取一次,後者只在登陸時讀取一次。加到 ~/.bashrc 中,在該檔案的未尾,可採用如下語句來使設定生效:
export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/usr/local/lib
修改完後,記得關掉當前終端並重新開啟一個新的終端,從而使上面的配置生效。 不過這個環境變數是基於shell的,也就是說只有在當前設定了的shell裡才會有作用,因此每次開啟新的shell執行程式不停地設定LD_LIBRARY_PATH,是一件非常麻煩的事情,所以我們就會想有不有什麼一勞永逸地方法,使得設定之後就不用再去設定了?答案是肯定的,即在~/目錄下開啟.bash_profile檔案,設定環境變數如下:
LD_LIBRARY_PATH=dir:$LD_LIBRARY_PATH
export LD_LIBRARY_PATH
LD_LIBRARY_PATH 這個環境變數是大家最為熟悉的,它告訴loader:在哪些目錄中可以找到共享庫。可以設定多個搜尋目錄,這些目錄之間用冒號分隔開。在linux下,還 提供了另外一種方式來完成同樣的功能,你可以把這些目錄加到/etc/ld.so.conf中,然後呼叫ldconfig。當然,這是系統範圍內全域性有效 的,而環境變數只對當前shell有效。按照慣例,除非你用上述方式指明,loader是不會在當前目錄下去找共享庫的,正如shell不會在當前目前找 可執行檔案一樣。
------------------------------------------------------------------以下為轉載內容----------------------------------------------------------------------------
一、庫檔案的搜尋路徑:
1、在配置檔案/etc/ld.so.conf中指定動態庫搜尋路徑(需要新增其它庫檔案的路徑,在檔案的最後新增具體的路徑即可 [ 如:/usr/local/lib ],新增後儲存退出,然後在命令列ldconfig
2、通過環境變數LD_LIBRARY_PATH指定動態庫搜尋路徑(當通過該環境變數指定多個動態庫搜尋路徑時,路徑之間用冒號":"分隔)
3、在編譯目的碼時指定該程式的動態庫搜尋路徑(還可以在編譯目的碼時指定程式的動態庫搜尋路徑。 這是通過gcc 的引數"-Wl,-rpath,"指定,當指定多個動態庫搜尋路徑時,路徑之間用冒號":"分隔)
4、預設的動態庫搜尋路徑/lib
5、預設的動態庫搜尋路徑/usr/lib
搜尋的先後順序是:
1.編譯目的碼時指定的動態庫搜尋路徑;
2.環境變數LD_LIBRARY_PATH指定的動態庫搜尋路徑;
3.配置檔案/etc/ld.so.conf中指定的動態庫搜尋路徑;
4.預設的動態庫搜尋路徑/lib;
5.預設的動態庫搜尋路徑/usr/lib。
二、Shell可執行程式命令檔案搜尋路徑:
1.檢視所有的搜尋路徑:echo $PATH
2.新增新的路徑:
1)只對當前shell視窗有效:
export PATH=$PATH:/new path
2)對所有視窗有效:
修改當前使用者的.bash_profile檔案,在PATH=$PATH……後新增":/new path";
儲存退出後,需要在當前視窗中執行". .bash_profile",更新配置,之後用echo $PATH顯示更新後的路徑,可以看到新加入的路徑;
注意:在重新登入前所有新開啟的shell視窗要用到新的路徑都需要執行". .bash_profile",更新配置,因為.bash_profile檔案的內容在使用者登入時就讀取了
轉至點選開啟連結