【Linux】一步一步学Linux——ldd命令(251)
00. 目錄
文章目錄
- 00. 目錄
- 01. 命令概述
- 02. 命令格式
- 03. 常用選項(xiàng)
- 04. 參考示例
- 05. 其它描述
- 06. 附錄
01. 命令概述
ldd命令用于打印程序或者庫文件所依賴的共享庫列表。
02. 命令格式
用法:ldd [選項(xiàng)]... FILE...03. 常用選項(xiàng)
-v 詳細(xì)信息模式,打印所有相關(guān)信息 -u 打印未使用的直接依賴 -d 執(zhí)行重定位和報(bào)告任何丟失的對(duì)象 -r 執(zhí)行數(shù)據(jù)對(duì)象和函數(shù)的重定位,并且報(bào)告任何丟失的對(duì)象和函數(shù) --help 顯示幫助信息04. 參考示例
4.1 查看命令依賴的庫
[deng@localhost ~]$ ldd /bin/vimlinux-vdso.so.1 => (0x00007ffe885db000)libm.so.6 => /lib64/libm.so.6 (0x00007f83328e0000)libselinux.so.1 => /lib64/libselinux.so.1 (0x00007f83326b9000)libtinfo.so.5 => /lib64/libtinfo.so.5 (0x00007f833248f000)libacl.so.1 => /lib64/libacl.so.1 (0x00007f8332286000)libgpm.so.2 => /lib64/libgpm.so.2 (0x00007f833207f000)libdl.so.2 => /lib64/libdl.so.2 (0x00007f8331e7b000)libperl.so => /usr/lib64/perl5/CORE/libperl.so (0x00007f8331aed000)libpthread.so.0 => /lib64/libpthread.so.0 (0x00007f83318d1000)libc.so.6 => /lib64/libc.so.6 (0x00007f8331504000)/lib64/ld-linux-x86-64.so.2 (0x00007f8332be2000)libpcre.so.1 => /lib64/libpcre.so.1 (0x00007f83312a2000)libattr.so.1 => /lib64/libattr.so.1 (0x00007f833109d000)libncurses.so.5 => /lib64/libncurses.so.5 (0x00007f8330e76000)libresolv.so.2 => /lib64/libresolv.so.2 (0x00007f8330c5d000)libnsl.so.1 => /lib64/libnsl.so.1 (0x00007f8330a43000)libcrypt.so.1 => /lib64/libcrypt.so.1 (0x00007f833080c000)libutil.so.1 => /lib64/libutil.so.1 (0x00007f8330609000)libfreebl3.so => /lib64/libfreebl3.so (0x00007f8330406000) [deng@localhost ~]$4.2 查看命令依賴的庫
[deng@localhost ~]$ ldd $(which vim)linux-vdso.so.1 => (0x00007ffffc9bc000)libm.so.6 => /lib64/libm.so.6 (0x00007fab2474e000)libselinux.so.1 => /lib64/libselinux.so.1 (0x00007fab24527000)libtinfo.so.5 => /lib64/libtinfo.so.5 (0x00007fab242fd000)libacl.so.1 => /lib64/libacl.so.1 (0x00007fab240f4000)libgpm.so.2 => /lib64/libgpm.so.2 (0x00007fab23eed000)libdl.so.2 => /lib64/libdl.so.2 (0x00007fab23ce9000)libperl.so => /usr/lib64/perl5/CORE/libperl.so (0x00007fab2395b000)libpthread.so.0 => /lib64/libpthread.so.0 (0x00007fab2373f000)libc.so.6 => /lib64/libc.so.6 (0x00007fab23372000)/lib64/ld-linux-x86-64.so.2 (0x00007fab24a50000)libpcre.so.1 => /lib64/libpcre.so.1 (0x00007fab23110000)libattr.so.1 => /lib64/libattr.so.1 (0x00007fab22f0b000)libncurses.so.5 => /lib64/libncurses.so.5 (0x00007fab22ce4000)libresolv.so.2 => /lib64/libresolv.so.2 (0x00007fab22acb000)libnsl.so.1 => /lib64/libnsl.so.1 (0x00007fab228b1000)libcrypt.so.1 => /lib64/libcrypt.so.1 (0x00007fab2267a000)libutil.so.1 => /lib64/libutil.so.1 (0x00007fab22477000)libfreebl3.so => /lib64/libfreebl3.so (0x00007fab22274000) [deng@localhost ~]$05. 其它描述
首先ldd不是一個(gè)可執(zhí)行程序,而只是一個(gè)shell腳本
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)境變量不為空時(shí),任何可執(zhí)行程序在運(yùn)行時(shí),它都會(huì)只顯示模塊的dependency,而程序并不真正執(zhí)行。要不你可以在shell終端測試一下,如下:
export LD_TRACE_LOADED_OBJECTS=1再執(zhí)行任何的程序,如ls等,看看程序的運(yùn)行結(jié)果。
ldd顯示可執(zhí)行模塊的dependency的工作原理,其實(shí)質(zhì)是通過ld-linux.so(elf動(dòng)態(tài)庫的裝載器)來實(shí)現(xiàn)的。我們知道,ld-linux.so模塊會(huì)先于executable模塊程序工作,并獲得控制權(quán),因此當(dāng)上述的那些環(huán)境變量被設(shè)置時(shí),ld-linux.so選擇了顯示可執(zhí)行模塊的dependency。
實(shí)際上可以直接執(zhí)行l(wèi)d-linux.so模塊,如:/lib/ld-linux.so.2 --list program(這相當(dāng)于ldd program)
06. 附錄
參考:【Linux】一步一步學(xué)Linux系列教程匯總
總結(jié)
以上是生活随笔為你收集整理的【Linux】一步一步学Linux——ldd命令(251)的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 【Linux系统编程】Linux系统调用
- 下一篇: 【Linux】一步一步学Linux——t