天天看點

ldd ldconfig LD_LIBRARY_PATH的關系

linux中搜尋動态庫的順序

============================================================

在 Linux 下面,共享庫的尋找和加載是由 /lib/ld.so 實作的。 ld.so 在标準路經(/lib, /usr/lib) 中尋找應用程式用到的共享庫。

但是,如果需要用到的共享庫在非标準路經,ld.so 怎麼找到它呢?

目前,Linux 通用的做法是将非标準路經加入 /etc/ld.so.conf,然後運作 ldconfig 生成 /etc/ld.so.cache。 ld.so 加載共享庫的時候,會從 ld.so.cache 查找。

傳統上,Linux 的先輩 Unix 還有一個環境變量:LD_LIBRARY_PATH 來處理非标準路經的共享庫。ld.so 加載共享庫的時候,也會查找這個變量所設定的路經。

LD_LIBRARY_PATH=$LD_LIBRARY_PATH:./lib

export LD_LIBRARY_PATH

但是,有不少聲音主張要避免使用 LD_LIBRARY_PATH 變量,尤其是作為全局變量

=============================================================================

ldd 的作用

==============================================================================

 ldd 指令的作用是 列印共享庫的依賴關系

1、首先ldd不是一個可執行程式,而隻是一個shell腳本

(1) export LD_TRACE_LOADED_OBJECTS=1

(2) 再執行任何的程式,如ls等,看看程式的運作結果

3、ldd顯示可執行子產品的dependency的工作原理,其實質是通過ld-linux.so(elf動态庫的裝載

器)來實作的。我們知道,ld-linux.so子產品會先于executable子產品程式工作,并獲得控制權,是以當上述的那些環境變量被設定時,ld-linux.so選擇了顯示可執行子產品的dependency。

4、實際上可以直接執行ld-linux.so子產品,如:/lib/ld-linux.so.2 --list program(這相當于ldd program)

ldconfig 工具的作用

ldconfig是一個動态連結庫管理指令。其目的是為了讓動态連結庫為系統所共享。 

ldconfig指令的用途 

主要是在預設搜尋目錄(/lib和/usr/lib)以及動态庫配置檔案/etc/ld.so.conf内所列的目錄下,搜尋出可共享的動态連結庫(格式如lib*.so*),進而建立出動态裝入程式(ld.so)所需的連接配接和緩存檔案。 

緩存檔案預設為/etc/ld.so.cache,此檔案儲存已排好序的動态連結庫名字清單。

ldconfig指令的使用時機 

ldconfig通常在系統啟動時運作,而當使用者安裝了一個新的動态連結庫時,就需要手工運作這個指令。

本文轉自神ge 51CTO部落格,原文連結:http://blog.51cto.com/12218412/1872613

繼續閱讀