#注意事項linux
- 64位的linux機器上的默共享庫的查找路徑爲:/lib64 /usr/lib64。實測發現不會搜索/lib /usr/lib。並且以上的兩個目錄沒有什麼so文件。/usr/local/lib6四、/usr/local/lib 這兩個目錄也不會搜索的。
- 動態庫的搜索路徑搜索的前後順序是: //註釋:竟然沒有當前路徑** 1.編譯目標代碼時指定的動態庫搜索路徑; //LDIRNAME 2.環境變量LD_LIBRARY_PATH指定的動態庫搜索路徑; 3.配置文件/etc/ld.so.conf中指定的動態庫搜索路徑;//只需在在該文件中追加一行庫所在的完整路徑如"/root/test/conf/lib"便可,而後ldconfig是修改生效。(其實是根據緩存文件/etc/ld.so.cache來肯定路徑) 4.默認的動態庫搜索路徑/lib;(64位機器爲/lib64) 5.默認的動態庫搜索路徑/usr/lib。(64位機器爲/usr/lib64)
- 關於ldconfig a) ldconfig主要的做用是根據/etc/ld.so.conf 的內容,查找內容中所包含目錄下實際的動態庫文件,生成搜索共享庫的緩存文件/etc/ld.so.cache 。 b) 緩存必須與實際路徑的文件相一致。機器比較傻,只認緩存,而後按照緩存的路徑去實際路徑查找文件。增長或刪除了實際的共享庫路徑下的文件,而沒有更新緩存,執行被其依賴的可執行文件時會出錯。 c) 查看共享庫的緩存內容。ldconfig -p。
- /lib 或 /usr/lib(64位系統下爲/lib64 /usr/lib64)路徑下的共享庫比較特殊。 a) 它是默認的共享庫的搜索路徑。 b) 它沒有放到/etc/ld.so.conf 文件中。可是在/etc/ld.so.cache 的緩存中有它。 c) 其路徑下的共享庫的變更即時生效,不用執行ldconfig。就算緩存ldconfig -p 中沒有,新加入的動態庫也能夠執行。
linux中搜索動態庫的順序
Linux 運行的時候,是如何管理共享庫(*.so)的? 在 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 變量,尤爲是做爲全局變量shell
ldd 的做用
ldd 命令的做用是 打印共享庫的依賴關係緩存
- 首先ldd不是一個可執行程序,而只是一個shell腳本
- ldd可以顯示可執行模塊的dependency,其原理是經過設置一系列的環境變量,以下:LD_TRACE_LOADED_OBJECTS、LD_WARN、LD_BIND_NOW、LD_LIBRARY_VERSION、 LD_VERBOSE等。當LD_TRACE_LOADED_OBJECTS環境變量不爲空時,任何可執行程序在運行時,它都會只顯示模塊的 dependency,而程序並不真正執行。要不你能夠在shell終端測試一下,以下: (1) export LD_TRACE_LOADED_OBJECTS=1 (2) 再執行任何的程序,如ls等,看看程序的運行結果
- ldd顯示可執行模塊的dependency的工做原理,其實質是經過ld-linux.so(elf動態庫的裝載 器)來實現的。咱們知道,ld-linux.so模塊會先於executable模塊程序工做,並得到控制權,所以當上述的那些環境變量被設置時,ld-linux.so選擇了顯示可執行模塊的dependency。
- 實際上能夠直接執行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一般在系統啓動時運行,而當用戶安裝了一個新的動態連接庫時,就須要手工運行這個命令。工具