一、ldd命令简介
众所周知,当我们在服务器上搭建某些服务时,通常该服务会依赖各种各样的共享库,经常头疼的是,某些服务启动不起来,就是因为缺少各种各样的依赖库。那么如何解决缺少依赖库而导致问题无法解决呢,还有就是如何查询某些服务所依赖的共享库呢?接下来介绍

ldd命令用于打印程序或者库文件所依赖的共享库列表
ldd(list, dynamic, dependencies),即为:列出动态库依赖关系。

二、ldd命令原理
首先ldd不是一个可执行程序,而只是一个shell脚本。
ldd能够显示可执行模块的dependency,其原理:通过设置一系列的环境变量,如下:LD_TRACE_LOADED_OBJECTS、LD_WARN、LD_BIND_NOW、LD_LIBRARY_VERSION、LD_VERBOSE等。
注意:当LD_TRACE_LOADED_OBJECTS环境变量不为空时,任何可执行程序在运行时,它都会只显示模块的dependency,而程序并不真正执行。
测试一下,在终端中导入该环境变量。

# 1、首先导入环境变量
export LD_TRACE_LOADED_OBJECTS=1
# 2、然后执行ls命令,即可显示出ls命令所依赖的系统动态库。
ls

结果如下:

ldd中dependency工作原理: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)

三、ldd使用实例
假设你该机器上部署的服务为nginx,
当你启动nginx发现,报错缺少相关lib库。
可能如下:

报错原因:启动nginx时,系统默认会去加载该服务相关的依赖库,如果缺少相关库,服务就无法启动。
问题分析:首先需要去查询该服务所依赖的库包括哪些,可采用如下命令:

ldd $(which /opt/nginx/sbin/nginx)   # 后面为nginx的启动路径

结果如下:显示了nginx所需要的依赖库

如上所示,缺少两个依赖库,所以nginx启动失败~
解决方法:安装相应的依赖库,可通过yum或其他rpm包去解决
然后再次执行ldd后,发现系统已经自动适配对应依赖库

再次启动nginx,
启动成功~问题解决

Linux篇之显示程序所需依赖库ldd命令的介绍与使用相关推荐

  1. tensorflow 2.10.0安装所需依赖库版本确定方法

    tensorflow 2.10.0安装所需依赖库版本确定方法 1 依赖版本组合 2 系统环境 3 依赖版本确定方法 3.1推理法 3.1.1 TensorFlow依赖范围 3.1.2 显卡驱动支持范围 ...

  2. gl linux qt 库_Linux下Qt应用程序的发布(使用LDD命令查看所有依赖的库文件)

    最近一直在学习Qt,用Qt写了一个程序,但是不知道怎么发布,网上说的都是在windows下怎么发布Qt应用程序,但是,在windows下Qt应用程序依赖的库文件与linux下的名字不同.于是,我就想到 ...

  3. Linux :ldd 命令的介绍与使用

    ldd用来打印或者查看程序运行所需的共享库(访问共享对象依赖关系),常用来解决程序因缺少某个库文件而不能运行的一些问题. 1.首先ldd不是一个可执行程序,而只是一个shell脚本 2.ldd能够显示 ...

  4. gcc编译选项的循环重复查找依赖库等命令

    link时,若liba.a依赖libb.a,若这样写 -lb -la,则链接通不过,gcc有个选项:-Xlinker ,可以让gcc在链接时反复查找依赖库,用法 : gcc -shared -o li ...

  5. linux下 lcd显示程序,linux中在应用层lcd显示的操作

    在Linux 系统中LCD的应用程序有特定编写模板. 1.打开/dev/fbX fp = open ("/dev/fb0",O_RDWR); 2.获取可变参数,固定参数 ioctl ...

  6. 1· linux命令:查看依赖的共享库 - ldd命令

    今天使用qt链接mysql的时候,发现提示driver not load 而出现此错误一般是没有mysql驱动的原因,但是qt5.4已经提供了mysql驱动的 查看plugins/sqldrivers ...

  7. linux系统shell知识点,Linux 系统中shell知识点说明和常用的帮助命令简单介绍 | IT工程师的生活足迹...

    linux 系统内核和各种驱动程序覆盖在下层的硬件系统之上:对上提供各种系统调用接口API,供shell和各种程序应用程序调用. 总体结构图如下: 操作系统的层次架构 一般我们理解shell指的是BA ...

  8. linux 查询程序的依赖库,linux下查看程序依赖的库

    在x86下,为了查看程序所依赖的库,可使用linux 但若是是使用arm-linux-gcc 等交叉编译环境编译出来的程序,则要使用web 库用于将类似函数打包在一个单元中.而后这些单元就可为其余开发 ...

  9. linux依赖关系查看命令,Linux下查看依赖关系

    我们在开发Linux程序时,经常会遇到查看自己的编译结果是否正常调用外部共享库,至少在编译结果能够查看到这层依赖关系.依赖关系有两种,一种是可执行文件依赖共享库,还有一种是共享库依赖共享库,查看方法如 ...

最新文章

  1. linux日程管理系统,Linux系统时间管理
  2. java清除cookie
  3. NGTabBarController
  4. FreeMarker四种变量的用法
  5. 概率论-4.2 中心极限定理
  6. 请举例说明如何在Spring 中注入一个Java 集合?
  7. ABS_MT_TOUCH_MAJOR和ABS_MT_WIDTH_MAJOR
  8. 请简述gouraud光照模型_OpenGL ES for Android(冯氏光照)
  9. 杭电1495非常可乐
  10. 液晶面板里面有些什么配件_液晶电视核心部件液晶面板有哪些类型?
  11. Orchard: module开发基础技术知识
  12. 软件经济工程学重点大纲
  13. 怎么在苹果手机上添加无线网络连接服务器,如何通过苹果iOS设备管理无线网络(图文解析)...
  14. 虚拟机VMware安装Windows7保姆级教程
  15. 得用户者得天下  解析明基的保时捷设计水准
  16. 保千里打令V10S上海体验秀 智能手机迎来全景时代
  17. db2 v9权威指南_花颜男妃(生子)
  18. Bug: Safari浏览器input框placeholder和内容都不显示
  19. Android基站定位——通过手机信号获取基站信息
  20. 当前最流行的 js 工具库

热门文章

  1. 基于ARM Cortex-M3微控制器(STM32系列)基础知识(二)——ARM内核体系结构
  2. 【ASP.NET】演绎GridView基本操作事件
  3. docker 部署jenkins 主节点子节点
  4. 绑定手机号 根据 互联网用户账号名称管理规定
  5. Vue 上传照片要求 Content-Type 为 multipart/form-data
  6. html的article标签,HTML的article标签
  7. unxwb使用例--提取游戏《超次元海王星 重生2》(Hyperdimension Neptunia ReBirth2)中的音频文件(文件后缀为 .xwb的解包方法)
  8. 解决同步Ajax页面假死
  9. Python Supervisord 进程管理工具
  10. Promise的使用及用法详解