日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 运维知识 > linux >内容正文

linux

【Linux】一步一步学Linux——ldd命令(251)

發布時間:2024/4/21 linux 43 豆豆
生活随笔 收集整理的這篇文章主要介紹了 【Linux】一步一步学Linux——ldd命令(251) 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

00. 目錄

文章目錄

    • 00. 目錄
    • 01. 命令概述
    • 02. 命令格式
    • 03. 常用選項
    • 04. 參考示例
    • 05. 其它描述
    • 06. 附錄

01. 命令概述

ldd命令用于打印程序或者庫文件所依賴的共享庫列表。

02. 命令格式

用法:ldd [選項]... FILE...

03. 常用選項

-v 詳細信息模式,打印所有相關信息 -u 打印未使用的直接依賴 -d 執行重定位和報告任何丟失的對象 -r 執行數據對象和函數的重定位,并且報告任何丟失的對象和函數 --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不是一個可執行程序,而只是一個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等,看看程序的運行結果。

ldd顯示可執行模塊的dependency的工作原理,其實質是通過ld-linux.so(elf動態庫的裝載器)來實現的。我們知道,ld-linux.so模塊會先于executable模塊程序工作,并獲得控制權,因此當上述的那些環境變量被設置時,ld-linux.so選擇了顯示可執行模塊的dependency。

實際上可以直接執行ld-linux.so模塊,如:/lib/ld-linux.so.2 --list program(這相當于ldd program)

06. 附錄

參考:【Linux】一步一步學Linux系列教程匯總

總結

以上是生活随笔為你收集整理的【Linux】一步一步学Linux——ldd命令(251)的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。