当前位置: 首页 > news >正文

Linux查看程序和动态库依赖的动态库

一. 前言

        在一些时候,我们需要知道一个程序或者动态库所依赖的动态库有哪些。比如,当我们运行一个程序的时候,发现可能会报错,提示找不到某个符号,这时我们就需要知道程序依赖了什么库,从而添加对应需要的动态库。等等,接下来介绍两种方法查看程序和动态库所依赖的动态库。

二. 方法介绍

1. 使用objdump命令
objdump -p FILE

        objdump命令加上"-p"选项可以打印程序的头部信息,包含各个段的信息和符号表的信息,其中,段信息中会有一个NEEDED字段,表示程序需要依赖的动态库,案例如下:

[root@localhost code]# objdump -p json-c/test1json-c/test1:     file format elf64-x86-64Program Header:PHDR off    0x0000000000000040 vaddr 0x0000000000400040 paddr 0x0000000000400040 align 2**3filesz 0x00000000000001f8 memsz 0x00000000000001f8 flags r-xINTERP off    0x0000000000000238 vaddr 0x0000000000400238 paddr 0x0000000000400238 align 2**0filesz 0x000000000000001c memsz 0x000000000000001c flags r--LOAD off    0x0000000000000000 vaddr 0x0000000000400000 paddr 0x0000000000400000 align 2**21filesz 0x0000000000000fd4 memsz 0x0000000000000fd4 flags r-xLOAD off    0x0000000000001e00 vaddr 0x0000000000601e00 paddr 0x0000000000601e00 align 2**21filesz 0x00000000000002ac memsz 0x00000000000002b0 flags rw-DYNAMIC off    0x0000000000001e18 vaddr 0x0000000000601e18 paddr 0x0000000000601e18 align 2**3filesz 0x00000000000001e0 memsz 0x00000000000001e0 flags rw-NOTE off    0x0000000000000254 vaddr 0x0000000000400254 paddr 0x0000000000400254 align 2**2filesz 0x0000000000000044 memsz 0x0000000000000044 flags r--
EH_FRAME off    0x0000000000000eac vaddr 0x0000000000400eac paddr 0x0000000000400eac align 2**2filesz 0x0000000000000034 memsz 0x0000000000000034 flags r--STACK off    0x0000000000000000 vaddr 0x0000000000000000 paddr 0x0000000000000000 align 2**4filesz 0x0000000000000000 memsz 0x0000000000000000 flags rw-RELRO off    0x0000000000001e00 vaddr 0x0000000000601e00 paddr 0x0000000000601e00 align 2**0filesz 0x0000000000000200 memsz 0x0000000000000200 flags r--Dynamic Section:NEEDED               libjson-c.so.4NEEDED               libc.so.6INIT                 0x00000000004008f8FINI                 0x0000000000400e24INIT_ARRAY           0x0000000000601e00INIT_ARRAYSZ         0x0000000000000008FINI_ARRAY           0x0000000000601e08FINI_ARRAYSZ         0x0000000000000008GNU_HASH             0x0000000000400298STRTAB               0x0000000000400510SYMTAB               0x00000000004002d0STRSZ                0x00000000000001c9SYMENT               0x0000000000000018DEBUG                0x0000000000000000PLTGOT               0x0000000000602000PLTRELSZ             0x00000000000001b0PLTREL               0x0000000000000007JMPREL               0x0000000000400748RELA                 0x0000000000400730RELASZ               0x0000000000000018RELAENT              0x0000000000000018VERNEED              0x0000000000400710VERNEEDNUM           0x0000000000000001VERSYM               0x00000000004006daVersion References:required from libc.so.6:0x09691a75 0x00 02 GLIBC_2.2.5

        由上面程序的NEEDED可知,test1程序依赖libjson-c.so.4libc.so.6程序,所以,使用objdump命令查看程序依赖的动态库的命令就很简单了,如下:

objdump -p json-c/test1 | grep NEEDED
2. 使用ldd命令

        ldd命令是专门用来打印程序和动态库所依赖的动态库的,命令如下:

ldd [OPTION]... FILE...

        ldd命令后面直接跟上文件名就可以了,案例如下:

# ldd json-c/test1
linux-vdso.so.1 =>  (0x00007fffccfc2000)
libjson-c.so.4 => /lib/libjson-c.so.4 (0x00007f28fcfd7000)
libc.so.6 => /lib64/libc.so.6 (0x00007f28fcc09000)
/lib64/ld-linux-x86-64.so.2 (0x00007f28fd1e6000)

        如上可以看出,ldd直接打印出了test1程序所依赖的动态库。

三. 总结

        本文介绍了两种查看程序和动态库所依赖的动态库的方法,分别是objdump -p和ldd命令,这在我们开发工作中提供便利,加快我们的开发效率。

相关文章:

Linux查看程序和动态库依赖的动态库

一. 前言 在一些时候,我们需要知道一个程序或者动态库所依赖的动态库有哪些。比如,当我们运行一个程序的时候,发现可能会报错,提示找不到某个符号,这时我们就需要知道程序依赖了什么库,从而添加对应需要的动…...

vue3 无法使用pnpm安装依赖 或 Cannot find module preinstall.js

创建.npmrc文件在根目录 shamefully-hoisttrue auto-install-peerstrue strict-peer-dependenciesfalse删除 node_modules 和 pnpm-lock.yaml 文件 重新 pnpm i 就可以啦...

C/C++连接数据库,包含完整代码。

C/C连接数据库 本篇文章意在简洁明了的在linux环境下使用C/C连接远程数据库,并对数据库进行增删查改等操作。我所使用的环境是centos7,不要环境除环境配置外,代码是大同小异的。完整代码在最底部!!! 1.前…...

AUTOSAR词典:CAN驱动Mailbox配置技术要点全解析

AUTOSAR词典:CAN驱动Mailbox配置技术要点全解析 前言 首先,请问大家几个小小问题,你清楚: AUTOSAR框架下的CAN驱动关键词定义吗?是不是有些总是傻傻分不清楚呢?CAN驱动Mailbox配置过程中有哪些关键配置参…...

C语言 coding style

头文件 The #define Guard #define的保护文件的唯一性&#xff0c;防止被多重包含 格式 : <PROJECT>_< FILE>_H_ PROJECT : XS FILE : MV_CTR 头文件的包含顺序 C System FilesOther LibrariesUser LibraryConditional include 作用域 局部变量 -变量定义时需要…...

Python办公自动化之PDF

Python操作PDF 1、Python操作PDF概述2、批量拆分3、批量合并4、提取内容(文字)5、提取内容(表格)6、提取图片7、PDF添加水印8、加密与解密1、Python操作PDF概述 Python操作PDF主要有两个库:PyPDF2和pdfplumber PyPDF2是一个用于处理PDF文件的Python第三方库 官网文档参考:…...

【每日一题Day331】LC2560打家劫舍 IV | 二分查找 + 贪心

打家劫舍 IV【LC2560】 沿街有一排连续的房屋。每间房屋内都藏有一定的现金。现在有一位小偷计划从这些房屋中窃取现金。 由于相邻的房屋装有相互连通的防盗系统&#xff0c;所以小偷 不会窃取相邻的房屋 。 小偷的 窃取能力 定义为他在窃取过程中能从单间房屋中窃取的 最大金额…...

JVM 参数详解

GC有两种类型&#xff1a;Scavenge GC 和Full GC 1、Scavenge GC 一般情况下&#xff0c;当新对象生成&#xff0c;并且在Eden申请空间失败时&#xff0c;就会触发Scavenge GC&#xff0c;堆的Eden区域进行GC&#xff0c;清除非存活对象&#xff0c;并且把尚且存活的对象移动到…...

uni-app获取地理位置

在uni-app中&#xff0c;可以通过uni.getLocation()方法获取地理位置。具体步骤如下&#xff1a; 在uni-app项目中的manifest.json文件中&#xff0c;添加需要获取地理位置的权限&#xff1a; {"mp-weixin": {"appid": "...","permission…...

Learn Prompt-Prompt 高级技巧:思维链 Chain of Thought Prompting

Jason Wei等作者对思维链的定义是一系列的中间推理步骤&#xff08; a series of intermediate reasoning steps &#xff09;。目的是为了提高大型语言模型&#xff08;LLM&#xff09;进行复杂推理的能力。 思维链通常是伴随着算术&#xff0c;常识和符号推理等复杂推理任务出…...

Vim编辑器使用入门

目录 一、Vim 编辑器基础操作 二、Vim 编辑器进阶操作 三、Vim 编辑器高级操作 四、Vim 编辑器文件操作 五、Vim 编辑器文件管理 六、Vim 编辑器进阶技巧 七、Vim 编辑器增强功能 Vim的三种工作模式 一、Vim 编辑器基础操作 1.移动光标 - 光标的移动控制 移动光标有两…...

早餐与风景

来吧&#xff0c;我用流水账描述下这一天。 时维九月&#xff0c;北京的早上有点冷&#xff0c;因为今天有个市场活动要去支撑&#xff0c;按照会议时间的要求&#xff0c;我需要在早上7点半就赶到会场&#xff0c;所以昨天晚上我加班到凌晨处理完了今天要给出去的材料&#xf…...

常用python代码串

记录新疆出差期间的一些代码 打开yaml文件python中的专有名词ctrlc 打开yaml文件 with open(/home/cyun/文档/cotton_ws/src/control/scripts/ControlParameter.yaml, r) as file:yaml_data yaml.load(file, Loaderyaml.FullLoader)后面发现像这种打开文件的最好是try一下 p…...

电脑桌面透明便签软件是哪个?

在现代快节奏的工作环境中&#xff0c;许多上班族都希望能够在电脑桌面上方便地记录工作资料、重要事项、工作流程等内容。为了解决这个问题&#xff0c;一款优秀的电脑桌面便签软件是必不可少的。在选择桌面便签软件时&#xff0c;许多用户也希望便签软件能够与电脑桌面壁纸相…...

Git创建干净分支,本地操作不依赖任何分支

clone远程项目: git clone gittest.git查看分支: git branch -a创建新分支: git checkout --orphan test, 返回Switched to a new branch test删除当前项目文件夹下所有文件: git rm -rf .提交变更: git commit -m "new branch for test"查看分支: git branch -a, 发…...

sqlmap tamper脚本编写

文章目录 tamper脚本是什么&#xff1f;指定tamper脚本运行sqlmap安全狗绕过tamper脚本 tamper脚本是什么&#xff1f; SQLMap 是一款SQL注入神器&#xff0c;可以通过tamper 对注入payload 进行编码和变形&#xff0c;以达到绕过某些限制的目的。但是有些时候&#xff0c;SQLM…...

5.5V-65V Vin同步降压控制器,具有线路前馈SCT82630DHKR

描述&#xff1a; SCT82630是一款65V电压模式控制同步降压控制器&#xff0c;具有线路前馈。40ns受控高压侧MOSFET的最小导通时间支持高转换比&#xff0c;实现从48V输入到低压轨的直接降压转换&#xff0c;降低了系统复杂性和解决方案成本。如果需要&#xff0c;在低至6V的输…...

YOLOv5、YOLOv8改进:Decoupled Head解耦头

目录 1.Decoupled Head介绍 2.Yolov5加入Decoupled_Detect 2.1 DecoupledHead加入common.py中&#xff1a; 2.2 Decoupled_Detect加入yolo.py中&#xff1a; 2.3修改yolov5s_decoupled.yaml 1.Decoupled Head介绍 Decoupled Head是一种图像分割任务中常用的网络结构&#…...

Prometheus+Grafana可视化监控【Redis状态】

文章目录 一、安装Docker二、安装Redis数据库(Docker容器方式)三、安装Prometheus四、安装Grafana五、Pronetheus和Grafana相关联六、安装redis_exporter七、Grafana添加Redis监控模板 一、安装Docker 注意&#xff1a;我这里使用之前写好脚本进行安装Docker&#xff0c;如果已…...

怒刷LeetCode的第6天(Java版)

目录 第一题 题目来源 题目内容 解决方法 方法一&#xff1a;哈希表 方法二&#xff1a;逐个判断字符 方法三&#xff1a;模拟减法 第二题 题目来源 题目内容 解决方法 方法一&#xff1a;水平扫描法 方法二&#xff1a;垂直扫描法 方法三&#xff1a;分治法 方…...

SSL双向认证-Nginx配置

SSL双向认证需要CA证书&#xff0c;开发过程可以利用自签CA证书进行调试验证。 自签CA证书生成过程&#xff1a;SSL双向认证-自签CA证书生成 Nginx配置适用于前端项目或前后端都通过Nginx转发的时候&#xff08;此时可不配置后端启用双向认证&#xff09; 1.Nginx配置&#…...

GO学习之 远程过程调用(RPC)

GO系列 1、GO学习之Hello World 2、GO学习之入门语法 3、GO学习之切片操作 4、GO学习之 Map 操作 5、GO学习之 结构体 操作 6、GO学习之 通道(Channel) 7、GO学习之 多线程(goroutine) 8、GO学习之 函数(Function) 9、GO学习之 接口(Interface) 10、GO学习之 网络通信(Net/Htt…...

八大排序(四)--------直接插入排序

本专栏内容为&#xff1a;八大排序汇总 通过本专栏的深入学习&#xff0c;你可以了解并掌握八大排序以及相关的排序算法。 &#x1f493;博主csdn个人主页&#xff1a;小小unicorn ⏩专栏分类&#xff1a;八大排序汇总 &#x1f69a;代码仓库&#xff1a;小小unicorn的代码仓库…...

MYSQL--存储引擎和日志管理

存储引擎&#xff1a; 一、存储引擎概念&#xff1a; MySQL中的数据用各种不同的技术存储在文件中&#xff0c;每一种技术都使用不同的存储机制、索引技巧、锁定水平并最终提供不同的功能和能力&#xff0c;这些不同的技术以及配套的功能在MySQL中称为存储引擎。存储引擎是My…...

VUE之更换背景颜色

1. 确定需求 在实现之前&#xff0c;首先需要明确需求&#xff0c;即用户可以通过某种方式更改页面背景颜色&#xff0c;所以我们需要提供一个可操作的控件来实现此功能。 2. 创建Vue组件 为了实现页面背景颜色更换功能&#xff0c;我们可以创建一个Vue组件。下面是一个简单…...

大型集团借力泛微搭建语言汇率时区统一、业务协同的国际化OA系统

国际化、全球化集团&#xff0c;业务遍布全世界&#xff0c;下属公司众多&#xff0c;集团对管理方式和企业文化塑造有着很高的要求。不少大型集团以数字化方式助力全球统一办公&#xff0c;深化企业统一管理。 面对大型集团全球化的管理诉求&#xff0c;数字化办公系统作为集…...

Quartz 建表语句SQL文件

SQL文件在jar里面&#xff0c;github下载 https://github.com/quartz-scheduler/quartz/releases/tag/v2.3.2 解压&#xff0c;sql文件路径&#xff1a;quartz-core\src\main\resources\org\quartz\impl\jdbcjobstore tables_mysql_innodb.sql # # In your Quartz propertie…...

nginx SseEmitter 长连接

1、问题还原&#xff1a; 在做openai机器人时&#xff0c;后台使用 SseEmitterEventSource 实现流式获取数据&#xff0c;前端通过 EventSourcePolyfill 函数接收后端的数据&#xff0c;在页面流式输出到页面&#xff0c;做成逐字打稿的效果。本地测试后&#xff0c;可以正常获…...

若依cloud -【 100 ~ 】

100 分布式日志介绍 | RuoYi 分布式日志就相当于把日志存储在不同的设备上面。比如若依项目中有ruoyi-modules-file、ruoyi-modules-gen、ruoyi-modules-job、ruoyi-modules-system四个应用&#xff0c;每个应用都部署在单独的一台机器里边&#xff0c;应用对应的日志的也单独存…...

VPN协议是如何工作的

VPN&#xff0c;全名 Virtual Private Network&#xff0c;虚拟专用网&#xff0c;就是利用开放的公众网络&#xff0c;建立专用数据传输通道&#xff0c;将远程的分支机构、移动办公人员等连接起来。 VPN 通过隧道技术在公众网络上仿真一条点到点的专线&#xff0c;是通过利用…...

做文章网站/网络推广怎么推广

ACL权限查看分区ACL权限是否开启# 查询指定分区详细文件系统信息dump2fs -h /dev/sda5选项&#xff1a;-h 仅显示超级块中信息&#xff0c;而不显示磁盘快组的详细信息结果中的Default mount options中有acl表示开启了ACL注意dumpe2fs只能查看ext的文件系统临时开启分区ACL权限…...

查二级建造师个人信息查询/seo是如何优化

SqlHelper详解2008-05-24 10:40SqlHelper 类实现详细信息SqlHelper 类用于通过一组静态方法来封装数据访问功能。该类不能被继承或实例化&#xff0c;因此将其声明为包含专用构造函数的不可继承类。在 SqlHelper 类中实现的每种方法都提供了一组一致的重载。这提供了一种很好的…...

网站建设及推广方案/深圳做网站的公司有哪些

首发于我的博客网站(prajna.top)&#xff1a; http://prajna.top/doc/4/278 apk文件 apk实际上就是一个zip文件&#xff0c;可以直接使用zip解压&#xff0c;它包含 classes.dex, 资源文件&#xff0c;证书&#xff0c;动态链接库等。 classes.dex: 代码文件&#xff0c;包含…...

企业如何做网站收款/男生最喜欢的浏览器推荐

13301 - 星号等腰三角形&#xff08;重要题型&#xff09; 时间限制 : 1 秒 内存限制 : 128 MB 输入一个正整数n&#xff0c;输出高为n的由*组成的等腰三角形。 输入 输入一个正整数 输出 输出高为n的由*组成的等腰三角形 样例 输入 3 输出 **** ***** 答案&#xff1a; …...

wordpress获取子菜单/企业排名优化公司

Qt creator使用clang-format优化代码风格...

威客做网站/高端网站建设报价

本文实例为大家分享了Java简易抽奖系统的具体代码&#xff0c;供大家参考&#xff0c;具体内容如下需求&#xff1a;实现一个抽奖系统1 注册2 登录3 抽奖必须先注册 再登陆 再抽奖随机产生4个随机数作为幸运卡号用户注册后 登录的时候 用户名密码输入判断只有三次机会需要做…...