1. 程式人生 > >linux 下程式執行時出現的 error while loading shared libraries

linux 下程式執行時出現的 error while loading shared libraries

Linux中error while loadin

  預設情況下,編譯器只會使用/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庫檔案了。