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