Linux中error while loading shared libraries錯誤解決辦法


  默認情況下,編譯器只會使用/lib和/usr/lib這兩個目錄下的庫文件,通常通過源碼包進行安裝時,如果不指定--prefix,會將庫安裝在/usr/local/lib目錄下;當運行程序需要鏈接動態庫時,提示找不到相關的.so庫,會報錯。也就是說,/usr/local/lib目錄不在系統默認的庫搜索目錄中,需要將目錄加進去。

  1、首先打開/etc/ld.so.conf文件

  2、加入動態庫文件所在的目錄:執行vi /etc/ld.so.conf,在"include ld.so.conf.d/*.conf"下方增加"/usr/local/lib"。

  3、保存后,在命令行終端執行/sbin/ldconfig -v;其作用是將文件/etc/ld.so.conf列出的路徑下的庫文件緩存到/etc/ld.so.cache以供使用,因此當安裝完一些庫文件,或者修改/etc/ld.so.conf增加了庫的新搜索路徑,需要運行一下ldconfig,使所有的庫文件都被緩存到文件/etc/ld.so.cache中,如果沒做,可能會找不到剛安裝的庫。

  經過以上三個步驟,"error while loading shared libraries"的問題通常情況下就可以解決了。

  如果運行應用程序時,還是提示以上錯誤,那就得確認一下是不是當前用戶在庫目錄下是不是沒有可讀的權限。像我遇到的問題就是,從別的機子拷貝了一些.so動態庫,然后用root權限放到了/usr/local/lib中(普通用戶沒有對該目錄的寫權限),然后切換用戶運行程序時,始終提示找不到.so庫,一直以為是我配置有問題,結果是因為權限原因,那些我用root權限增加到/usr/local/lib中的.so文件對於普通用戶而言,是沒有訪問權限的,所以以普通用戶運行程序,當需要鏈接.so庫時,在/usr/local/lib中是查找不到的。

  其實,對於由普通用戶自己編譯生成的.so庫文件,比較好的做法是將這些.so庫文件的路徑用export指令加入到~/.bash_profile中的LD_LIBRARY_PATH變量中,LD_LIBRARY_PATH是程序運行需要鏈接.so庫時會去查找的一個目錄~/.bash_profile是登陸或打開shell時會讀取的文件,這樣,每次用戶登錄時,都會把這些.so庫文件的路徑寫入LD_LIBRARY_PATH,這樣就可以正常地使用這些.so庫文件了。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2024 CODEPRJ.COM