教會你什么是Linux ldd
本人很喜歡Linux,在工作中也很喜歡總結(jié)關(guān)于Linux的經(jīng)驗教訓(xùn),下面Linux ldd的這個問題來講講,希望你能熟練掌握Linux ldd知識。
1、首先ldd不是一個可執(zhí)行程序,而只是一個shell腳本
2、ldd能夠顯示可執(zhí)行模塊的dependency,其原理是通過設(shè)置一系列的環(huán)境變量,如下: LD_TRACE_LOADED_OBJECTS、LD_WARN、LD_BIND_NOW、LD_LIBRARY_VERSION、 LD_VERBOSE等。當(dāng)LD_TRACE_LOADED_OBJECTS環(huán)境變量不為空時,任何可執(zhí)行程序在運(yùn)行時,它都會只顯示模塊的 dependency,而程序并不真正執(zhí)行。要不你可以在shell終端測試一下,如下:
(1) export LD_TRACE_LOADED_OBJECTS=1
(2) 再執(zhí)行任何的程序,如ls等,看看程序的運(yùn)行結(jié)果
3、 ldd顯示可執(zhí)行模塊的dependency的工作原理,其實質(zhì)是通過ld-linux.so(elf動態(tài)庫的裝載器)來實現(xiàn)的。我們知道,ld- linux.so模塊會先于executable模塊程序工作,并獲得控制權(quán),因此當(dāng)上述的那些環(huán)境變量被設(shè)置時,ld-linux.so選擇了顯示可執(zhí) 行模塊的dependency。
4、實際上可以直接執(zhí)行l(wèi)d-linux.so模塊,如:/lib/ld-linux.so.2 --list program(這相當(dāng)于ldd program)
onebyte:
ldd的作用:最近程序一直運(yùn)行不起來,也很想用ldd看一下其到底加載了哪些運(yùn)行庫,但由于在HOST上已交叉編譯過,所以在HOST上用 ldd無果。后來一直沒有什么好的辦法。今天看了這篇文章才恍然大悟,原來ldd只是個腳本文件,那不是直接將其拷貝到TARGET就可以了嗎?立刻動手,果然好使!發(fā)現(xiàn)程序原來少了libqte.so.3的庫,太好了!從HOST上拷一個過來就可以了。
本為為你介紹的Linux ldd知識,希望你能學(xué)好。
【編輯推薦】