初入職常見問題:編譯或者運行程序老是找不到動態庫,嘗試設置Linux環境變量吧

linux的excutable在執行的時候缺省是先搜索/lib和/usr/lib這兩個目錄

然後按照ld.so.conf裏面的配置搜索絕對路徑,linux缺省是不會在當前目錄搜索動態庫的

windows加載動態庫的時候,缺省是首先加載本地目錄下的動態庫

然後再搜索windows/system和windows/system32目錄。

 

 

1打印動態庫的查找路徑

echo $LD_LIBRARY_PATH

有些機器是echo $LIBRARY_PATH,兩個都可以打出來看看

 

2設置動態庫的查找路徑(假設我的動態庫放在/usr/local/mydir/lib)

法一:

export LD_LIBRARY_PATH = $LD_LIBRARY_PATH:/usr/local/mydir/lib  這種設置方法退出終端下次回來要重新設置

(如果不行嘗試LIBRARY_PATH = $LIBRARY_PATH:/usr/local/mydir/lib)

法二:

sudo vim ~/.bashrc 或者~/.bash_profile(centos是~/.bash_profile,ubuntu是~/.profile)(當前帳號以後都優先加載你設置目錄的動態庫)

或者系統級別的/etc/profile(讓所有賬號從此都有限加載你設置的目錄的動態庫)

末尾加上:export LD_LIBRARY_PATH=/usr/local/mydir/lib:$LD_LIBRARY_PATH

(如果不行,就嘗試export LIBRARY_PATH=/usr/local/mydir/lib:$LIBRARY_PATH)

修改完不是馬上生效的,需要source  ~/.bashrc(注意那個點)   讓剛剛的修改生效,

或者如果你不嫌麻煩 註銷系統重新登錄也是可以的

有時候我們需要加載當前所在目錄路徑的庫那麼

在LD_LIBRARY_PATH=./:/usr/local/mydir/dir:$LD_LIBRARY_PATH

你應該發現了:是個間隔符號

 

法三(注意此方法的庫路徑需要絕對路徑):

vim /ect/ld.so.conf   

    如果內容是include ld.so.conf.d/*.conf

        那麼建議新建一個配置文件 sudo vim /etc/ld.so.conf.d/myconf.conf,

        在myconf.conf裏面加上/usr/local/mydir/lib

    否則直接在/ect/ld.so.conf 加上/usr/local/mydir/lib

    (當然你非要在/etc/ld.so.conf裏面填寫/usr/local/mydir/lib也是可以的)

保存後執行ldconfig讓你寫的東西生效

 

3 如果你使用的是linux下的cmake(筆者只用過centos和ubuntu)

        如果你有外部已經生成的動態庫文件 libtest.so,在使用CMake編譯生成目標文件myproject時需要依賴該so庫文件,假設文件存於{MY_PROJECT_DIR}/bin目錄下,要鏈接成功, 需要做的是:

        在CMakeLists.txt文件中加入兩行

        1: LINK_LIBRARIES(${MY_PROJECT_DIR}/bin) #該命令的作用相當與gcc命令的-L參數的作用

        2:ADD_EXECUTABLE(myproject  ${MY_PROJECT_SOURCES}) # ${MY_PROJECT_SOURCES}爲myproject依賴的源文件目錄

        3:TARGET_LINK_LIBRARIES(myproject   test)

        另外,請確保LINK_LIBRARIES命令寫在ADD_EXECUTABLE之前。
 

4 當你發現依然不行,心中難免有些煩惱,其實大家都這麼過來的

   A 首先檢查你的配置路徑名是否拼寫正確,這個會讓你很無語

   B sudo find / -name “mylib.so” 查找是不是有多個同名so導致了這種異常

      你甚至可以在嘗試一下sudo find / -name "mylib" 

   C 如果你沒有這個庫,ldd一下你編譯生成的庫或者運行程序,把你沒有的庫網上找到裝上試試

      注意了,即便是有路徑的也要仔細檢查路徑是不是你要的路徑,有時候可能是系統的,不是你提供的庫所在路徑

   D 如果你真的有這個庫了,重啓一下試試吧,雖然也許道不明理由但是能幫你解決工程就好

   E 如果你是虛擬機的共享文件夾下編譯,有時候會出現問題的,不妨拷貝程序到其他目錄編譯運行試試

   F 如果你是編譯成功了,可執行程序起不來,把你程序所需要的庫全部都單獨放到一個目錄,按前面介紹的方法

      設置庫路徑,運行一下,sudo ldd xxx(你的程序名)一下程序看看缺什麼庫

   G 朋友,你已經努力了,諮詢一下同事看看吧,沒有什麼不好意思的,只是旁觀者清,看別人的錯誤總是比看自己的容易的多

   H 祝你好運  

 

 

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章