Linux系统下查看动态库依赖关系指令(ldd)

下面介绍一下在Linux系统下利用ldd指令查看动态库依赖关系;

LDD用来打印或者查看程序运行所需的共享库,常用来解决程序因缺少某个库文件而不能运行的一些问题。ldd不是一个可执行程序,而只是一个shell脚本。

使用ldd可以很方便的查看库与库之间的依赖关系,存放路径等等;对于排查链接不到库的问题很有帮助;

1、ldd命令全称

ldd命令全称为list dynamic dependencies(列出动态依赖),是Linux下常用的命令之一。它可以用来显示一个可执行文件或者共享库(动态链接库)所依赖的共享库。

2 ldd参数说明

  • –help 获取指令帮助信息;
  • –version 打印指令版本号;
  • -d,–data-relocs 执行重定位和报告任何丢失的对象;
  • -r, --function-relocs 执行数据对象和函数的重定位,并且报告任何丢失的对象和函数;
  • -u, --unused 打印未使用的直接依赖;
  • -v, --verbose 详细信息模式,打印所有相关信息;

3 简单示例

ldd libEngineTask.so//查看libEngineTask.so所依赖的库

在这里插入图片描述
可以看到,libEngineTask.so库需要依赖libAIEngine.so,而libAIEngine.so的位置在./AI_lib/libAIEngine.so ,它的开始位置是0x00007f6928c7d000。

4 查看缺少的依赖库

如果当前的动态库因为缺少依赖库而无法链接,那么可以通过ldd查看缺少的依赖库。比如还是上面的例子,我去AI_lib路径下手动把libAIEngine.so删掉,再去执行ldd,结果如下
在这里插入图片描述
结果中可以看出,libEngineTask.so库需要依赖libAIEngine.so,而libAIEngine.so却找不到,方便排查。

5、ldd指令详细介绍

1、ldd是Linux中的一个重要命令,用于打印可执行文件或共享库所依赖的动态链接库信息。下面详细介绍ldd指令的功能和用法。

命令格式:
ldd [选项] <可执行文件或共享库>

2、功能描述:
ldd命令显示一个可执行文件或共享库所依赖的动态链接库列表。它会递归地检查文件所依赖的所有库,并显示它们的路径。通过ldd命令可以了解一个程序运行所需的库文件,以及这些库文件是否存在、版本是否匹配等信息。

3、常用选项:
-v, --verbose:显示详细的调试信息,包括版本号、加载方式等。
-u, --unused:只显示未使用的直接依赖库。
-r, --function-relocs:在关联库中显示函数的重定位信息。
-d, --data-relocs:在关联库中显示数据的重定位信息。
–help:显示帮助信息。
–version:显示版本信息。

4、使用示例:
(1) 查看可执行文件所依赖的库:
ldd /path/to/executable

(2) 查看共享库的依赖关系:
ldd /path/to/shared_library.so

(3) 显示详细的依赖库信息:
ldd -v /path/to/executable

(4) 只显示未使用的直接依赖库:
ldd -u /path/to/executable

(5) 显示函数和数据的重定位信息:
ldd -r /path/to/executable

5、输出解读:
对于每个所依赖的库,ldd会显示它的路径,并用以下格式标记其状态:
=> 文件路径:正常找到并链接。
=> not found:未找到该库文件。
=> version mismatch:版本不匹配。
=> incompatible:与可执行文件或其他库不兼容。
=> symbol not found:找不到某个符号。

另外,ldd命令还可以显示库所需的其他库。通过观察输出结果,在开发调试过程中可以及时了解和解决动态链接库的相关问题。

使用ldd命令可以帮助开发人员、系统管理员等快速了解程序运行所需的库文件是否存在、版本是否匹配,从而排查库依赖问题。在调试和部署过程中,ldd是一个非常有用的工具,能够提高开发效率和减少出错的可能性。

vs查看动态库依赖关系是指在Visual Studio(VS)开发环境中,通过相应的工具和功能来查看项目或者解决方案中动态链接库(DLL)之间的依赖关系。 在VS中查看动态库依赖关系,可以采取以下几种方法: 1. 使用“资源管理器”查看:在VS的“解决方案资源管理器”中,可以通过展开项目或解决方案的“引用”或“链接器”文件夹,找到相关的动态库文件。这样可以直观地查看当前项目或解决方案所依赖的动态库,并能够看到它们之间的关系。 2. 使用“属性页”查看:对于项目或解决方案,右键点击选择“属性”,打开相应的属性页。在属性页中,可以找到“常规”、“VC++目录”、“链接器”等选项卡,通过浏览这些选项卡的内容,可以看到当前项目或解决方案所依赖的动态库及其路径。 3. 使用“代码分析器”查看:VS中有一款名为“代码分析器”的工具,通过该工具可以对项目进行静态代码分析并生成相应的报告。在这份报告中,可以找到与动态库相关的信息,包括它们的依赖关系。 通过上述方法,开发人员可以方便地查看动态库依赖关系。这对于项目的构建、打包和部署等工作非常重要,能够确保所依赖的动态库被正确地引入和链接,提高项目的可靠性和稳定性。同时,这也为调试过程中的错误定位和问题解决提供了有力支持。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

乘凉~

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值