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)相关推荐

  1. 学linux作用,linux有必要学吗?学linux有什么作用,学linux能干什么

    Linux是一种自由和开放源码的类UNIX操作系统.Linux有必要学吗?学Linux有什么作用,学Linux能干什么?Linux最大的作用就是提高效率.当你习惯在Linux命令行下工作,再回到win ...

  2. LINUX学习之路(学LINUX必看)

    很多同学接触Linux不多,对Linux平台的开发更是一无所知.而现在的趋势越来越表明,作为一 个优秀的软件开发人员,或计算机IT行业从业人员,掌握Linux是一种很重要的谋生资源与手段.下来我将会结 ...

  3. linux学习需要什么基础,学linux需要什么基础?

    近几年来,随着计算机网络的发展,越来越多的人学习 linux.对于想要从事运维工作或者从事智能开发方面的同学来说,学习 linux 是必要的.linux 的学习并不简单,那么这篇文章 w3cschoo ...

  4. 分享--linux 学习之路(学linux必看)

    很多同学接触Linux不多,对Linux平台的开发更是一无所知. 而现在的趋势越来越表明,作为一个优秀的软件开发人员,或计算机IT行业从业人员, 掌握Linux是一种很重要的谋生资源与手段. 下来我将 ...

  5. 英语不好学linux运维难吗,学Linux系统难吗?学好Linux运维需要多久

    随着近年来经济的快速发展,企业对Linux人才的需求也越来越高.许多人认为,Linux是一个非常简单的行业,然而,Linux行业是一个综合了云计算.Linux运维.Linux开发.Linux编程等多方 ...

  6. 不会linux的php难找工作,学linux系统难吗

    这是 Linux初学者经常会问的问题,其实Linux和Windows一样都属于操作系统,对于大部分人来说,对Windows操作系统十分熟悉,而对Linux操作系统没有使用过,所以觉得很难,其实,只要熟 ...

  7. linux lamp实验报告,新手学Linux--构建lamp

    本人前不久开始学习Linux,俗话说得好,好记性不如烂笔头,于是决定将平日所学所做实验,记录下来,以备回顾.由于本人是个初学者,所以借鉴了很多网上的资料,但在此处写出来的都是经过本人思考和多次实验的记 ...

  8. Linux其实没那么难学

    互联网技术总是更新迭代的,因为2020年的一场疫情,影响着中国乃至整个世界,就在这一年,网络直播,远程办公,在线教育等等的互联网产物进入了众多人的世界,当然,这其中离不开程序员的功劳. 李开复曾经说过 ...

  9. 大学生为什么要学Linux?Linux有什么优点?

    前言 Linux是一种自由和开放源码的类UNIX操作系统.Linux有必要学吗?学Linux有什么作用,学Linux能干什么?Linux最大的作用就是提高效率.当你习惯在Linux命令行下工作,再回到 ...

最新文章

  1. 从 Kafka 看时间轮算法设计
  2. python线下培训-天津python培训,0基础学python线上还是线下好?
  3. webpack基础概念
  4. petshop 出现没有为 SQL 缓存通知启用数据库“MSPetShop4”
  5. python 数据库表结构转为类_Python数据科学实践 | 数据库1
  6. pic单片机内部时钟校准c语言,实例讲解PIC单片机的时钟设置
  7. 半轴CVJ(constant velocity joint)
  8. Missing artifact log4j:log4j:bundle:1.2.17
  9. Neo4j:Cypher – Neo.ClientError.Statement.TypeError:不知道如何添加Double和String
  10. openGauss与PostgreSQL分区策略语法测试
  11. 索尼印度研究院启动运营 将在应用AI和数据分析领域提供就业机会
  12. leetcode-22-括号生成
  13. [Oracle]分区索引
  14. (产品分析)KFC肯德基APP分析报告
  15. python绘制太阳花_Python绘制蟒蛇和太阳花
  16. 年终盘点 | 2020年最佳CV论文速览「AI核心算法」
  17. 计算机音乐简单教学反思,一年级音乐教学反思(精选10篇)
  18. win10删除开机密码_win10老是自动更新怎么办?如何完全禁止win10自动更新?
  19. 4.1 心跳机制和垃圾回收机制
  20. 如何计算2个矩阵的相似性?

热门文章

  1. 利用微软类库 Visual Studio International Pack 汉字转拼音
  2. 用WPF开发Mapxtreme-- 在.net 4.0 下面开发WPF mapxtreme 程序
  3. linux编译动态库未定义,自定义动态库 对‘*’未定义的引用解决方法
  4. java从入门到精通_python精通后能赚多少?平均情况。普通智商,刚毕业朝九晚五工作,每天4到5小时学多久精通?...
  5. ise的时钟ip核_ISE的IP核clocking wizard使用和例化
  6. int*类型和int类型_mysql8.0.19中在navicat客户端中int、bigint等类型设置长度保存后为0...
  7. Java黑皮书课后题第1章:1.5(计算表达式)编写程序,显示以下式子的结果
  8. java bufferedinputstream 编码_java中关于编码的问题(字符转换流及字符缓冲流 )
  9. java instraction_Java Instruction.getCodeUnits方法代码示例
  10. MongoDB数据导入hbase + 代码