新聞中心
Linux可執(zhí)二進制行文件和庫依賴查看方法
1、查看依賴庫
創(chuàng)新互聯(lián)-專業(yè)網(wǎng)站定制、快速模板網(wǎng)站建設(shè)、高性價比嵐皋網(wǎng)站開發(fā)、企業(yè)建站全套包干低至880元,成熟完善的模板庫,直接使用。一站式嵐皋網(wǎng)站制作公司更省心,省錢,快速模板網(wǎng)站建設(shè)找我們,業(yè)務(wù)覆蓋嵐皋地區(qū)。費用合理售后完善,十年實體公司更值得信賴。
1.1、查看可執(zhí)行文件依賴的庫有哪些
舉例,查看常用的ls工具,依賴哪些庫:
1.2、查看動態(tài)庫,依賴的庫有哪些
舉例,查看libcap依賴的庫有哪些:
linuxqt程序依賴庫位置
操作如下:
1、從可運行程序的文件中拿出可執(zhí)行文件。
2、終端下使用ldd命令查看需要的連接庫。
3、把ldd查詢到的所有需要的庫導(dǎo)出。
4、編寫.sh文檔。
5、把所用到的庫,可執(zhí)行文件,.sh文件放到同一目錄下。
6、終端中進入這一目錄,輸入:chmod+xtest.sh。
7、執(zhí)行程序點擊.sh文件或終端輸入:./test.sh。
ldd查看動態(tài)依賴庫
ldd命令用于輸出程序或者庫文件所依賴的共享庫列表。
語法
選項
參數(shù)
文件:指定可執(zhí)行程序或者文庫。
ldd原理
首先,ldd不是一個可執(zhí)行程序,而只是一個shell腳本。
ldd能夠顯示可執(zhí)行模塊的dependency,其原理是通過設(shè)置一系列的環(huán)境變量,如下: LD_TRACE_LOADED_OBJECTS、LD_WARN、LD_BIN_NOW、LD_LIBRARY_VERSION、LD_VERBOSE 等。當 LD_TRACE_LOADED_OBJECTS 環(huán)境變量不為空時,任何可執(zhí)行程序在運行時,它都只會顯示模塊的dependency,而程序并不真正執(zhí)行。測試結(jié)果如下:
ldd 顯示可執(zhí)行模塊的dependency的工作原理,其實質(zhì)是通過ld-linux.so(elf動態(tài)庫的裝載器)來實現(xiàn)的。ld-linux.so模塊會先于executable模塊程序工作,并獲得控制權(quán)。因此當上述的那些變量設(shè)置時,ld-linux.so選擇了顯示可執(zhí)行模塊的dependency。
ld-linux.so讀取可執(zhí)行程序的頭信息,這些信息采用 Executable and Linking Format 或者(ELF)格式。 它們通過這些消息,來確定哪些庫是必須的,以及哪些庫需要加載。 然后執(zhí)行動態(tài)鏈接,把可執(zhí)行程序當中所有的地址指針與需要加載的庫聯(lián)系起來, 這樣程序就可以運行了。
實際上可以直接執(zhí)行l(wèi)d-linux.so模塊,如: /lib64/ld-linux-x86-64.so.2 --list ./a.out (這相當于 ldd a.out )。
示例
通過上面的信息,我們可以得到以下幾個信息:
linux源碼包怎么查看依賴關(guān)系
一、可執(zhí)行文件/二進制文件依賴共享庫
ldd命令用來查看可執(zhí)行文件依賴的共享庫文件。
$ ldd --help
Usage: ldd [OPTION]... FILE...
--help print this help and exit
--version print version information and exit
-d, --data-relocs process data relocations
-r, --function-relocs process data and function relocations
-u, --unused print unused direct dependencies
-v, --verbose print all information
示例:
$ ldd helloworld
二、共享庫依賴共享庫關(guān)系
上面的ldd命令無法查看共享庫的依賴關(guān)系,因為共享庫本身并不是可執(zhí)行文件,我們可以使用
objdump -x libhelloworld.so | grep NEEDED
其中,libhelloworld.so是你的庫名稱。
附:
readelf命令用于讀取ELF Header信息
網(wǎng)頁名稱:linux查找依賴庫命令 linux檢查依賴包
文章URL:http://www.dlmjj.cn/article/dopddhj.html