ldd命令 查看程序所依赖的共享库。

本文介绍了ldd命令的工作原理及其实现方式。ldd并非直接的可执行程序,而是通过一系列环境变量设置来显示可执行模块依赖。这些环境变量包括LD_TRACE_LOADED_OBJECTS等。文章还说明了如何通过直接调用ld-linux.so来达到相同的效果。
ldd 程序名

转http://blog.youkuaiyun.com/bekars/archive/2006/02/16/600701.aspx

1、首先ldd不是一个可执行程序,而只是一个shell脚本

2、ldd能够显示可执行模块的dependency,其原理是通过设 置一系列的环境变量,如下:LD_TRACE_LOADED_OBJECTS、LD_WARN、LD_BIND_NOW、 LD_LIBRARY_VERSION、LD_VERBOSE等。当LD_TRACE_LOADED_OBJECTS环境变量不为空时,任何可执行程序在 运行时,它都会只显示模块的dependency,而程序并不真正执行。要不你可以在shell终端测试一下,如下:
 (1) export LD_TRACE_LOADED_OBJECTS=1
 (2) 再执行任何的程序,如ls等,看看程序的运行结果
 
3、 ldd显示可执行模块的dependency的工作原理,其实质是通过ld-linux.so(elf动态库的装载器)来实现的。我们知道,ld- linux.so模块会先于executable模块程序工作,并获得控制权,因此当上述的那些环境变量被设置时,ld-linux.so选择了显示可执 行模块的dependency。

4、实际上可以直接执行ld-linux.so模块,如:/lib/ld-linux.so.2 --list program(这相当于ldd program)

 
在银河麒麟系统(aarch64架构)中,`ldd`命令用于查看可执行文件动态库的依赖关系,帮助诊断动态链接库加载失败的问题。使用该命令时,需确保目标文件是ELF格式的可执行文件共享库(.so文件)。 要使用`ldd`命令查看动态库依赖,首先需确认系统中已安装`binutils`工具链,其中包含了`ldd`实用程序。银河麒麟系统通常默认安装了该工具链,若未安装,可通过系统包管理器进行安装。 ### 使用`ldd`命令检查动态库依赖 假设目标动态库文件为`libsqlitejdbc.so`,位于`/usr/lib64/`目录下,可执行以下命令: ```bash ldd /usr/lib64/libsqlitejdbc.so ``` 该命令将输出目标文件所依赖共享库列表,包括每个依赖库的路径和加载状态。若某个依赖库缺失路径不正确,系统将标记为“not found”。 ### 分析输出信息 输出示例如下: ``` linux-vdso.so.1 => (0x0000ffff9f5f0000) libpthread.so.0 => /lib/aarch64-linux-gnu/libpthread.so.0 (0x0000ffff9f5c0000) libdl.so.2 => /lib/aarch64-linux-gnu/libdl.so.2 (0x0000ffff9f5a0000) libc.so.6 => /lib/aarch64-linux-gnu/libc.so.6 (0x0000ffff9f3f0000) /lib/ld-linux-aarch64.so.1 => /lib/ld-linux-aarch64.so.1 (0x0000ffff9f5f0000) ``` 上述信息显示了`libsqlitejdbc.so`所依赖的各个共享库及其实际加载路径。如果发现某个库未找到,需确认该库是否已正确安装,并调整库搜索路径安装缺失的依赖[^2]。 ### 设置库搜索路径 若某些依赖库不在默认搜索路径中,可通过设置`LD_LIBRARY_PATH`环境变量扩展搜索路径: ```bash export LD_LIBRARY_PATH=/opt/custom_libs:$LD_LIBRARY_PATH ldd /usr/lib64/libsqlitejdbc.so ``` 此方式可临时将`/opt/custom_libs`目录加入动态链接器的搜索路径,帮助识别额外的依赖库。 ### 验证系统兼容性 在aarch64架构下,确保所使用的动态库与当前系统架构一致,且版本兼容。若提示所需的`glibc`版本高于系统版本,可能需要更换兼容的库版本更新系统库。 ---
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值