淺析Linux LD_LIBRARY_PATH ㈠ 曆史背景 現如今、軟體大多內建共用庫、或者出於安全、或者基於商業考量 如: ORACLE :$ORACLE_HOME/lib MySQL :$HOME/mysql/lib 下面貼上oracle使用者下.bash_profile裡關於LD_LIBRARY_PATH設定[plain] export LD_LIBRARY_PATH=$ORACLE_HOME/lib export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/usr/lib:/usr/X11R6/lib export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:$ORACLE_HOME/jdk/jre/lib/i386 export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:$ORACLE_HOME/jdk/jre/lib/i386/server export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:$ORACLE_HOME/rdbms/lib ㈡ 幾個概念 ① 下面幾個大意相近 共用庫、動態連結程式庫、.so檔案 ② ld.so 花名又叫:共用庫載入器 ㈢ 存在的意義 用來告訴 ld.so 到哪裡可以找到某某人的共用庫 ㈣ 大概說說 .so檔案的管理和載入由ld.so負責、他在標準路徑/lib 或 /usr/lib 裡尋找APP所需的.so、 但對於非標路徑: Linux做法是把私人路徑加入/etc/ld.so.conf、運行ldconfig產生ld.so.cache、ld.so會去尋找這個cache UNIX作風則是採用LD_LIBRARY_PATH來處理非標路徑的.so檔案 尋找優先順序如下(Linux): ① LD_LIBRARY_PATH 環境變數指定目錄 ② /etc/ld.so.conf指定目錄 ③ 標準路徑 先/usr/lib 再 /lib ㈤ 常見錯誤 error while loading shared libraries:ooxx.so.0:cannot open shared object file:No such file or directory 這裡的ooxx是如何命名的、有興趣的朋友自行參考 點擊開啟連結 ㈥ 通用的方案 ① 將這些內建庫cp到/usr/lib或/lib、然後ldconfig 有個案例:點擊開啟連結 ② /etc/ld.so.conf 、然後ldconfig ③ LD_LIBRARY_PATH(這個變數有些遭人詬病)