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