[一天一个命令]ldd

ldd用于查看程序运行所需的共享库,常用来解决程式因缺少某个库文件而不能运行的一些问题。

示例:查看test程序运行所依赖的库:

1
2
3
4
5
6
7
8
~/work/test/Test/build $ ldd example
linux-vdso.so.1 => (0x00007ffe71d28000)
libpthread.so.0 => /lib64/libpthread.so.0 (0x00007fd8c9d88000)
libstdc++.so.6 => /lib64/libstdc++.so.6 (0x00007fd8c9a81000)
libm.so.6 => /lib64/libm.so.6 (0x00007fd8c977f000)
libgcc_s.so.1 => /lib64/libgcc_s.so.1 (0x00007fd8c9569000)
libc.so.6 => /lib64/libc.so.6 (0x00007fd8c919c000)
/lib64/ld-linux-x86-64.so.2 (0x00007fd8c9fa4000)

第一列:程序需要依赖什么库
第二列: 系统提供的与程序需要的库所对应的库
第三列:库加载的开始地址

通过上面的信息,我们可以得到以下几个信息:

  1. 通过对比第一列和第二列,我们可以分析程序需要依赖的库和系统实际提供的,是否相匹配
  2. 通过观察第三列,我们可以知道在当前的库中的符号在对应的进程的地址空间中的开始位置
    如果依赖的某个库找不到,通过这个命令可以迅速定位问题所在;