ldd命令
ldd命令
😄 Written by Zak Zhu
参考
- wanghetao | ldd命令 (https://www.cnblogs.com/wanghetao/p/3779611.html)
- Linux命令大全 | ldd命令 (https://man.linuxde.net/ldd)
- 沙振宇 | Linux系统命令之ldconfig、ldd (https://shazhenyu.blog.csdn.net/article/details/88064111)
命令简介
ldd命令:
- 查看二进制文件或库文件所依赖的动态库列表.
- 常用于解决程序因缺少某个库文件而不能运行的一些问题.
命令语法
Usage:
ldd [OPTION]... FILE...
Options:
OPTION | COMMENT |
---|---|
-v | 详细信息模式, 打印所有相关信息 |
-u | 打印未使用的直接依赖 |
-d | 执行重定位和报告任何丢失的对象 |
-r | 执行数据对象和函数的重定位, 并且报告任何丢失的对象和函数 |
命令原理
-
ldd命令不是一个可执行程序(二进制文件), 而是一个Shell脚本.
-
ldd命令其实时依靠设置一些环境变量而实现的. 如:
LD_TRACE_LOADED_OBJECTS
,LD_WARN
,LD_BIND_NOW
,LD_LIBRARY_VERSION
,LD_VERBOSE
,LD_DEBUG
. 当LD_TRACE_LOADED_OBJECTS
环境变量不为空时, 任何命令在运行时, 它都只显示该命令所依赖的动态库列表, 而命令本身不真正执行.我们可以测试一下, 如下图所示: -
ldd命令显示可执行模块的dependency的工作原理, 其实质是通过ld-linux.so来实现的. 我们知道, ld-linux.so模块会先于executable模块程序工作, 并获得控制权, 因此当上述的那些环境变量被设置时, ld-linux.so选择了显示可执行模块的dependency.
-
实际上可以直接执行ld-linux.so模块, 如:
/lib/ld-linux.so.2 --list program
等同于ldd program
.