默認狀況下,編譯器只會使用/lib和/usr/lib這兩個目錄下的庫文件,一般經過源碼包進行安裝時,若是不指定--prefix,會將庫安裝在/usr/local/lib目錄下;當運行程序須要連接動態庫時,提示找不到相關的.so庫,會報錯。也就是說,/usr/local/lib目錄不在系統默認的庫搜索目錄中,須要將目錄加進去。shell
一、首先打開/etc/ld.so.conf文件緩存
二、加入動態庫文件所在的目錄:執行vi /etc/ld.so.conf,在"include ld.so.conf.d/*.conf"下方增長"/usr/local/lib"。bash
三、保存後,在命令行終端執行:/sbin/ldconfig -v;其做用是將文件/etc/ld.so.conf列出的路徑下的庫文件緩存到/etc/ld.so.cache以供使用,所以當安裝完一些庫文件,或者修改/etc/ld.so.conf增長了庫的新搜索路徑,須要運行一下ldconfig,使全部的庫文件都被緩存到文件/etc/ld.so.cache中,若是沒作,可能會找不到剛安裝的庫。spa
通過以上三個步驟,"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庫文件了。源碼