12.3 查找动态链接库

当程序使用共享库编译时在运行时刻需要加载这些共享库用于调用外部函数。Ldd命令检查可执行文件中所需要的共享库。这些库称为该程序的共享库依赖。

例如下面的命令说明怎样查找Hello World程序的共享库依赖:

$ gcc -Wall hello.c

$ ldd a.out

libc.so.6 => /lib/libc.so.6 (0x40020000)

/lib/ld-linux.so.2 => /lib/ld-linux.so.2 (0x40000000)

输出显示Hello World程序依赖于C库libc(共享库版本6)和动态加载库ld-linux(共享库版本2)。

如果程序使用外部库如数学库,也会被显示出来。例如calc程序(使用了sqrt函数)产生了下面的输出:

$ gcc -Wall calc.c -lm -o calc

$ ldd calc

libm.so.6 => /lib/libm.so.6 (0x40020000)

libc.so.6 => /lib/libc.so.6 (0x40041000)

/lib/ld-linux.so.2 => /lib/ld-linux.so.2 (0x40000000)

第一行显示这个程序依赖数学库libm(共享库版本6),还有C库和动态加载库。

Ldd命令也可用于检查共享库本身,用于跟踪共享库依赖链。