You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

48 lines
1.6 KiB

This file contains ambiguous Unicode characters!

This file contains ambiguous Unicode characters that may be confused with others in your current locale. If your use case is intentional and legitimate, you can safely ignore this warning. Use the Escape button to highlight these characters.

ldd
===
打印程序或者库文件所依赖的共享库列表
## 说明
**ldd命令** 用于打印程序或者库文件所依赖的共享库列表。
### 语法
```
ldd(选项)(参数)
```
```
--version打印指令版本号
-v详细信息模式打印所有相关信息
-u打印未使用的直接依赖
-d执行重定位和报告任何丢失的对象
-r执行数据对象和函数的重定位并且报告任何丢失的对象和函数
--help显示帮助信息。
```
### 参数
文件:指定可执行程序或者文库。
### 其他介绍
首先ldd不是一个可执行程序而只是一个shell脚本
ldd能够显示可执行模块的dependency其原理是通过设置一系列的环境变量如下`LD_TRACE_LOADED_OBJECTS、LD_WARN、LD_BIND_NOW、LD_LIBRARY_VERSION、LD_VERBOSE`等。当`LD_TRACE_LOADED_OBJECTS`环境变量不为空时任何可执行程序在运行时它都会只显示模块的dependency而程序并不真正执行。要不你可以在shell终端测试一下如下
```
export LD_TRACE_LOADED_OBJECTS=1
```
再执行任何的程序如ls等看看程序的运行结果。
ldd显示可执行模块的dependency的工作原理其实质是通过ld-linux.soelf动态库的装载器来实现的。我们知道ld-linux.so模块会先于executable模块程序工作并获得控制权因此当上述的那些环境变量被设置时ld-linux.so选择了显示可执行模块的dependency。
实际上可以直接执行ld-linux.so模块`/lib/ld-linux.so.2 --list program`这相当于ldd program