Linux篇之显示程序所需依赖库ldd命令的介绍与使用
一、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命令的介绍与使用相关推荐
- tensorflow 2.10.0安装所需依赖库版本确定方法
tensorflow 2.10.0安装所需依赖库版本确定方法 1 依赖版本组合 2 系统环境 3 依赖版本确定方法 3.1推理法 3.1.1 TensorFlow依赖范围 3.1.2 显卡驱动支持范围 ...
- gl linux qt 库_Linux下Qt应用程序的发布(使用LDD命令查看所有依赖的库文件)
最近一直在学习Qt,用Qt写了一个程序,但是不知道怎么发布,网上说的都是在windows下怎么发布Qt应用程序,但是,在windows下Qt应用程序依赖的库文件与linux下的名字不同.于是,我就想到 ...
- Linux :ldd 命令的介绍与使用
ldd用来打印或者查看程序运行所需的共享库(访问共享对象依赖关系),常用来解决程序因缺少某个库文件而不能运行的一些问题. 1.首先ldd不是一个可执行程序,而只是一个shell脚本 2.ldd能够显示 ...
- gcc编译选项的循环重复查找依赖库等命令
link时,若liba.a依赖libb.a,若这样写 -lb -la,则链接通不过,gcc有个选项:-Xlinker ,可以让gcc在链接时反复查找依赖库,用法 : gcc -shared -o li ...
- linux下 lcd显示程序,linux中在应用层lcd显示的操作
在Linux 系统中LCD的应用程序有特定编写模板. 1.打开/dev/fbX fp = open ("/dev/fb0",O_RDWR); 2.获取可变参数,固定参数 ioctl ...
- 1· linux命令:查看依赖的共享库 - ldd命令
今天使用qt链接mysql的时候,发现提示driver not load 而出现此错误一般是没有mysql驱动的原因,但是qt5.4已经提供了mysql驱动的 查看plugins/sqldrivers ...
- linux系统shell知识点,Linux 系统中shell知识点说明和常用的帮助命令简单介绍 | IT工程师的生活足迹...
linux 系统内核和各种驱动程序覆盖在下层的硬件系统之上:对上提供各种系统调用接口API,供shell和各种程序应用程序调用. 总体结构图如下: 操作系统的层次架构 一般我们理解shell指的是BA ...
- linux 查询程序的依赖库,linux下查看程序依赖的库
在x86下,为了查看程序所依赖的库,可使用linux 但若是是使用arm-linux-gcc 等交叉编译环境编译出来的程序,则要使用web 库用于将类似函数打包在一个单元中.而后这些单元就可为其余开发 ...
- linux依赖关系查看命令,Linux下查看依赖关系
我们在开发Linux程序时,经常会遇到查看自己的编译结果是否正常调用外部共享库,至少在编译结果能够查看到这层依赖关系.依赖关系有两种,一种是可执行文件依赖共享库,还有一种是共享库依赖共享库,查看方法如 ...
最新文章
- linux日程管理系统,Linux系统时间管理
- java清除cookie
- NGTabBarController
- FreeMarker四种变量的用法
- 概率论-4.2 中心极限定理
- 请举例说明如何在Spring 中注入一个Java 集合?
- ABS_MT_TOUCH_MAJOR和ABS_MT_WIDTH_MAJOR
- 请简述gouraud光照模型_OpenGL ES for Android(冯氏光照)
- 杭电1495非常可乐
- 液晶面板里面有些什么配件_液晶电视核心部件液晶面板有哪些类型?
- Orchard: module开发基础技术知识
- 软件经济工程学重点大纲
- 怎么在苹果手机上添加无线网络连接服务器,如何通过苹果iOS设备管理无线网络(图文解析)...
- 虚拟机VMware安装Windows7保姆级教程
- 得用户者得天下 解析明基的保时捷设计水准
- 保千里打令V10S上海体验秀 智能手机迎来全景时代
- db2 v9权威指南_花颜男妃(生子)
- Bug: Safari浏览器input框placeholder和内容都不显示
- Android基站定位——通过手机信号获取基站信息
- 当前最流行的 js 工具库
热门文章
- 基于ARM Cortex-M3微控制器(STM32系列)基础知识(二)——ARM内核体系结构
- 【ASP.NET】演绎GridView基本操作事件
- docker 部署jenkins 主节点子节点
- 绑定手机号 根据 互联网用户账号名称管理规定
- Vue 上传照片要求 Content-Type 为 multipart/form-data
- html的article标签,HTML的article标签
- unxwb使用例--提取游戏《超次元海王星 重生2》(Hyperdimension Neptunia ReBirth2)中的音频文件(文件后缀为 .xwb的解包方法)
- 解决同步Ajax页面假死
- Python Supervisord 进程管理工具
- Promise的使用及用法详解