0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
会员中心
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

ldd命令:用于打印程序或者共享库文件所依赖的共享库列表

Linux爱好者 来源:Linux爱好者 作者:恋猫大鲤鱼 2021-02-02 11:37 次阅读

1.命令简介

ldd 命令用于打印程序或者共享库文件所依赖的共享库列表。注意,ldd 本身不是一个二进制程序,而是一个 Shell 脚本,使用文本编辑器 vim 可以查看其内容,具体目录可以使用 which 命令查看:

whichldd
/usr/bin/ldd

我们知道,Linux 的动态库装载器 ld-linux.so 模块会先于 executable 模块工作,并获得控制权,ld-linux.so 会通过系统环境变量的设置,选择只显示可执行模块的dependency,而不运行可执行模块。相关环境变量有:

ldd 默认开启的环境变量是:LD_TRACE_LOADED_OBJECTS=1。也就是说,LD_TRACE_LOADED_OBJECTS为必要环境变量,其他环境变量的设置是可选的。其他的变量的设置与ldd命令选项的对应关系如下:

-d,--data-relocs->LD_WARN=yes
-r,--function-relocs->LD_WARN和LD_BIND_NOW=yes
-u,--unused->LD_DEBUG="unused"
-v,--verbose->LD_VERBOSE=yes

比如设置LD_TRACE_LOADED_OBJECTS环境变量不为空时,任何可执行程序在运行时,都会只显示依赖的动态库,程序并不真正地执行。测试如下:

exportLD_TRACE_LOADED_OBJECTS=1
ls
linux-vdso.so.1=>(0x00007ffd1d3cf000)
/$LIB/libonion.so=>/lib64/libonion.so(0x00007fbbe7162000)
libselinux.so.1=>/lib64/libselinux.so.1(0x00007fbbe6e2e000)
libcap.so.2=>/lib64/libcap.so.2(0x00007fbbe6c29000)
libacl.so.1=>/lib64/libacl.so.1(0x00007fbbe6a20000)
libc.so.6=>/lib64/libc.so.6(0x00007fbbe665e000)
libdl.so.2=>/lib64/libdl.so.2(0x00007fbbe645a000)
libpthread.so.0=>/lib64/libpthread.so.0(0x00007fbbe623e000)
libpcre.so.1=>/lib64/libpcre.so.1(0x00007fbbe5fdd000)
liblzma.so.5=>/lib64/liblzma.so.5(0x00007fbbe5db8000)
/lib64/ld-linux-x86-64.so.2(0x00007fbbe7053000)
libattr.so.1=>/lib64/libattr.so.1(0x00007fbbe5bb3000)

撤销该环境变量,ls 即可恢复正常使用:

unsetLD_TRACE_LOADED_OBJECTS
ls
ChangelogChangelog.lndablelvtxt.txt

由此可见,ldd 命令其实是通过设置 ld-linux.so 依赖的环境变量来影响 ld-linux.so的工作方式,使得可执行模块加载时显示其依赖的动态库。实际上可以直接执行 ld-linux.so 模块,如/lib/ld-linux.so.2 --list program,来达到命令ldd program的效果。

2.命令格式

ldd[OPTIONS]

其中[OPTIONS]为可选的命令选项,...为必填的程序或者共享库文件列表。

3.选项说明

--version:打印ldd版本号
-v, --verbose:详细信息模式,打印所有相关信息
-u, --unused:打印未使用的直接依赖
-d, --data-relocs:执行重定位和报告任何丢失的对象
-r,--function-relocs:执行数据对象和函数的重定位,并且报告任何丢失的对象和函数。(只对ELF格式文件有效)
--help:显示帮助信息

4.示例说明

(1)显示可执行文件依赖的动态链接库。

ldd/usr/bin/ls
linux-vdso.so.1=>(0x00007ffd90514000)
/$LIB/libonion.so=>/lib64/libonion.so(0x00007f294ade8000)
libselinux.so.1=>/lib64/libselinux.so.1(0x00007f294aab4000)
libcap.so.2=>/lib64/libcap.so.2(0x00007f294a8af000)
libacl.so.1=>/lib64/libacl.so.1(0x00007f294a6a6000)
libc.so.6=>/lib64/libc.so.6(0x00007f294a2e4000)
libdl.so.2=>/lib64/libdl.so.2(0x00007f294a0e0000)
libpthread.so.0=>/lib64/libpthread.so.0(0x00007f2949ec4000)
libpcre.so.1=>/lib64/libpcre.so.1(0x00007f2949c63000)
liblzma.so.5=>/lib64/liblzma.so.5(0x00007f2949a3e000)
/lib64/ld-linux-x86-64.so.2(0x00007f294acd9000)
libattr.so.1=>/lib64/libattr.so.1(0x00007f2949839000)

参考文献

[1] ldd manual
[2] Linux命令大全.ldd命令
[3] 博客园.ldd命令

责任编辑:xj

原文标题:每天一个 Linux 命令(103):ldd 命令

文章出处:【微信公众号:Linux爱好者】欢迎添加关注!文章转载请注明出处。


声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • Linux
    +关注

    关注

    87

    文章

    11324

    浏览量

    209936
  • 命令
    +关注

    关注

    5

    文章

    690

    浏览量

    22062
  • Shell脚本
    +关注

    关注

    0

    文章

    36

    浏览量

    7998

原文标题:每天一个 Linux 命令(103):ldd 命令

文章出处:【微信号:LinuxHub,微信公众号:Linux爱好者】欢迎添加关注!文章转载请注明出处。

收藏 人收藏

    评论

    相关推荐

    腾讯ima升级知识功能,上线小程序实现共享与便捷问答

    近日,腾讯旗下的AI智能工作台ima.copilot(简称ima)迎来了知识功能的重大升级。此次升级不仅增加了“共享知识”的新能力,还正式上线了“ima知识”小
    的头像 发表于 12-31 15:32 335次阅读

    如何使用cmp进行数据管理的技巧

    使用 cmp 命令进行数据管理可能不是最直观的方法,因为 cmp 通常用于比较两个文件是否相同。然而,如果你的意图是使用 cmp 来检查数据库文件
    的头像 发表于 12-17 09:31 148次阅读

    数据数据恢复—MYSQL数据ibdata1文件损坏的数据恢复案例

    mysql数据故障: mysql数据库文件ibdata1、MYI、MYD损坏。 故障表现:1、数据无法进行查询等操作;2、使用mysqlcheck和myisamchk无法修复数据
    的头像 发表于 12-09 11:05 187次阅读

    数据数据恢复—通过拼接数据碎片恢复SQLserver数据

    一个运行在存储上的SQLServer数据,有1000多个文件,大小几十TB。数据每10天生成一个NDF文件,每个NDF几百GB大小。数据
    的头像 发表于 10-31 13:21 277次阅读
    数据<b class='flag-5'>库</b>数据恢复—通过拼接数据<b class='flag-5'>库</b>碎片恢复SQLserver数据<b class='flag-5'>库</b>

    在bootloader和应用程序之间共享FEE块

    电子发烧友网站提供《在bootloader和应用程序之间共享FEE块.pdf》资料免费下载
    发表于 10-10 09:18 0次下载
    在bootloader和应用<b class='flag-5'>程序</b>之间<b class='flag-5'>共享</b>FEE块

    数据数据恢复—SQL Server数据出现823错误的数据恢复案例

    SQL Server数据故障: SQL Server附加数据出现错误823,附加数据失败。数据没有备份,无法通过备份恢复数据
    的头像 发表于 09-20 11:46 379次阅读
    数据<b class='flag-5'>库</b>数据恢复—SQL Server数据<b class='flag-5'>库</b>出现823错误的数据恢复案例

    用于具有AES硬件加密功能的TM4C129器件的共享密钥引导加载程序

    电子发烧友网站提供《用于具有AES硬件加密功能的TM4C129器件的共享密钥引导加载程序.pdf》资料免费下载
    发表于 08-27 09:56 1次下载
    <b class='flag-5'>用于</b>具有AES硬件加密功能的TM4C129器件的<b class='flag-5'>共享</b>密钥引导加载<b class='flag-5'>程序</b>

    PADS-3D文件

    PADS-3D文件
    发表于 08-15 17:20 27次下载

    Microbit文件

    Microbit  文件
    发表于 08-07 14:29 0次下载

    FSP启动文件说明

    FSP启动文件说明
    的头像 发表于 06-04 08:06 503次阅读
    FSP<b class='flag-5'>库</b>启动<b class='flag-5'>文件</b>说明

    怎么共享屏幕给对方,可以选择不同的屏幕共享软件?

    ,在清晰度、流畅度上表现良好。 四、屏幕共享软件测评体验: QQ、YY等软件虽然有屏幕分享的功能,但功能比较薄弱,用于分享静态图片或“大字报”尚可,如果对清晰度和流畅度有要求的话,几乎可以考虑放弃
    发表于 05-17 21:47

    Linux系统中共享文件找不到怎么办

      1.首先输下面命令查看是否真的设置成功共享文件夹 vmware-hgfsclient 如果确实已经设置过共享文件夹将输出window下
    的头像 发表于 05-11 08:49 886次阅读
    Linux系统中<b class='flag-5'>共享</b><b class='flag-5'>文件</b>找不到怎么办

    HarmonyOS开发:【基于命令行(安装和工具集)】

    使用命令行进行设备开发时,可以通过以下步骤安装编译OpenHarmony需要的和工具。
    的头像 发表于 04-25 21:03 447次阅读
    HarmonyOS开发:【基于<b class='flag-5'>命令</b>行(安装<b class='flag-5'>库</b>和工具集)】

    Linux系统共享文件缺失的解决策略

    如果确实已经设置过共享文件夹将输出window下共享文件夹名字
    的头像 发表于 04-15 10:25 995次阅读
    Linux系统<b class='flag-5'>共享</b><b class='flag-5'>文件</b>缺失的解决策略

    鸿蒙开发学习:【OpenHarmony HAR】

    OpenHarmony js/ts三方使用的是OpenHarmony静态共享包,即HAR(Harmony Archive),可以包含js/ts代码、c++、资源和配置文件。通过HA
    的头像 发表于 03-18 16:27 780次阅读