天天看點

教會你什麼是Linux ldd

教會你什麼是Linux ldd

本人很喜歡Linux,在工作中也很喜歡總結關于Linux的經驗教訓,下面Linux ldd的這個問題來講講,希望你能熟練掌握Linux ldd知識。

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

2、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等,看看程式的運作結果

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)

onebyte:

ldd的作用:最近程式一直運作不起來,也很想用ldd看一下其到底加載了哪些運作庫,但由于在HOST上已交叉編譯過,是以在HOST上用 ldd無果。後來一直沒有什麼好的辦法。今天看了這篇文章才恍然大悟,原來ldd隻是個腳本檔案,那不是直接将其拷貝到TARGET就可以了嗎?立刻動手,果然好使!發現程式原來少了libqte.so.3的庫,太好了!從HOST上拷一個過來就可以了。

本為為你介紹的Linux ldd知識,希望你能學好。

繼續閱讀