淺析 Linux LD_LIBRARY_PATH

來源:互聯網
上載者:User
      ㈠ 曆史背景
        
        現如今、軟體大多內建共用庫、或者出於安全、或者基於商業考量
        如:
        ORACLE :$ORACLE_HOME/lib
        MySQL :$HOME/mysql/lib
        

        下面貼上oracle使用者下.bash_profile裡關於LD_LIBRARY_PATH設定

export LD_LIBRARY_PATH=$ORACLE_HOME/libexport LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/usr/lib:/usr/X11R6/libexport LD_LIBRARY_PATH=$LD_LIBRARY_PATH:$ORACLE_HOME/jdk/jre/lib/i386export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:$ORACLE_HOME/jdk/jre/lib/i386/serverexport 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(這個變數有些遭人詬病)


  2013-07-19 補充:

  查看某程式所依賴的共用庫的方法如下:

[root@cdio ~]# ldd /home/mysql/mysql/bin/mysqldump        libpthread.so.0 => /lib64/libpthread.so.0 (0x000000337d200000)        libz.so.1 => /usr/lib64/libz.so.1 (0x000000337e600000)        librt.so.1 => /lib64/librt.so.1 (0x000000337d600000)        libdl.so.2 => /lib64/libdl.so.2 (0x000000337c600000)        libstdc++.so.6 => /usr/lib64/libstdc++.so.6 (0x00000031ebe00000)        libm.so.6 => /lib64/libm.so.6 (0x000000337da00000)        libgcc_s.so.1 => /lib64/libgcc_s.so.1 (0x00000031e9e00000)        libc.so.6 => /lib64/libc.so.6 (0x000000337c200000)        /lib64/ld-linux-x86-64.so.2 (0x000000337be00000)

   輸出可分三列解釋:

   第一列:程式所依賴的庫

   第二列:系統提供的與程式所需的庫的對應庫

   第三列:庫載入的開始地址

        
        
By WaterBin
2013-07-17
Good Luck

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.