00. 目錄
文章目錄
-
- 01. 指令概述
- 02. 指令格式
- 03. 常用選項
- 04. 參考示例
- 05. 其它描述
- 06. 附錄
ldd指令用于列印程式或者庫檔案所依賴的共享庫清單。
用法:ldd [選項]... FILE...
-v 詳細資訊模式,列印所有相關資訊
-u 列印未使用的直接依賴
-d 執行重定位和報告任何丢失的對象
-r 執行資料對象和函數的重定位,并且報告任何丢失的對象和函數
--help 顯示幫助資訊
4.1 檢視指令依賴的庫
[deng@localhost ~]$ ldd /bin/vim
linux-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 ~]$
首先ldd不是一個可執行程式,而隻是一個shell腳本
ldd能夠顯示可執行子產品的dependency,其原理是通過設定一系列的環境變量,如下:
LD_TRACE_LOADED_OBJECTS、LD_WARN、LD_BIND_NOW、LD_LIBRARY_VERSION、LD_VERBOSE
等。當
LD_TRACE_LOADED_OBJECTS
環境變量不為空時,任何可執行程式在運作時,它都會隻顯示子產品的dependency,而程式并不真正執行。要不你可以在shell終端測試一下,如下:
export LD_TRACE_LOADED_OBJECTS=1
再執行任何的程式,如ls等,看看程式的運作結果。