1. 程式人生 > >Linux下應用程式找不到存在的庫(.so/.a)的解決方法

Linux下應用程式找不到存在的庫(.so/.a)的解決方法

各種各樣的環境變數控制著一些關鍵的過程。例如你可以臨時為你特定的程式的一次執行指定一個不同的函式庫。Linux系統中,通常變數LD_LIBRARY_PATH就是可以用來指定函式庫查詢路徑的,而且這個路徑通常是在查詢標準的路徑之前查詢。這個是很有用的,特別是在除錯一個新的函式庫的時候,或者在特殊的場合使用一個肥標準的函式庫的時候。環境變數LD_PRELOAD列出了所有共享函式庫中需要優先載入的庫檔案,功能和/etc/ld.so.preload類似。這些都是有/lib/ld-linux.so這個loader來實現的。值得一提的是,LD_LIBRARY_PATH可以在大部分的UNIX-linke系統下正常起作用,但是並非所有的系統下都可以使用,例如HP-UX系統下,就是用SHLIB_PATH這個變數,而在AIX下則使用LIBPATH這個變數。    
   
  LD_LIBRARY_PATH在開發和除錯過程中經常大量使用,但是不應該被一個普通使用者在安裝過程中被安裝程式修改,大家可以去參考

http://www.visi.com/~barr/ldpath.html,這裡有一個文件專門介紹為什麼不使用LD_LIBRARY_PATH這個變數。  


環境變數LD_LIBRARY_PATH列出了查詢共享庫時除了預設路徑之外的其他路徑。
如果不想修改或無法修改(無root許可權)/etc/ld.so.conf而使用其他路徑下的庫檔案
就需要設定LD_LIBRARY_PATH了。
例:export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/opt/lib
這樣就可以使用/opt/lib下的庫檔案啦。當然還是修改/etc/ld.so.conf方便。 

另一篇文章:

關於 error while loading shared libraries: libXXX.so.1.2.3: cannot open shared object file: No such file or directory

然後如果發現了libXXX.so.1.2.3的確存在,就把libXXX.so.1.2.3所在的目錄加入到 /etc/ld.so.conf 中,或者在 /etc/ld.so.conf.d/ 下新建一檔案,如 XXX.conf ,其內容是libXXX.so.1.2.3所在的目錄。如果提示是error while loading shared libraries: libXXX.so,但你的系統上有libXXX.so.5,你可以為libXXX.so.5做一個軟連結 ln -s libXXX.so.5 libXXX.so.

在linux下,可以把動態連結庫的目錄加入這個檔案,然後執行一下ldconfig。這樣程式就能找到動態連結庫了