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庫文件了。

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