binutils 常见问题

显示程序直接依赖的动态库

ldd 命令会显示程序依赖的所有库,如果只需要显示直接依赖的动态库,可以使用 objdump 命令获取,而且相比 ldd 命令默认只能显示当前系统架构的程序的依赖,objdump 命令可以显示非本地架构程序的依赖:

~# objdump -p XXX | grep NEEDED
19:  NEEDED               libssl.so.10
20:  NEEDED               libcrypto.so.10
21:  NEEDED               libdl.so.2.1
22:  NEEDED               libz.so.1
23:  NEEDED               librt.so.1
24:  NEEDED               libc.so.6.1

readelf 命令也可以实现类似效果:

~# readelf -d XXX | grep NEEDED
4: 0x0000000000000001 (NEEDED)             Shared library: [libssl.so.10]
5: 0x0000000000000001 (NEEDED)             Shared library: [libcrypto.so.10]
6: 0x0000000000000001 (NEEDED)             Shared library: [libdl.so.2.1]
7: 0x0000000000000001 (NEEDED)             Shared library: [libz.so.1]
8: 0x0000000000000001 (NEEDED)             Shared library: [librt.so.1]
9: 0x0000000000000001 (NEEDED)             Shared library: [libc.so.6.1]