在linux下一个程序编译成功了,并不一定可以成功运行,原因是有些程序调用了动态链接库,而程序拷贝到其他电脑上由于缺少动态链接库导致无法运行。
可通过如下命令查看程序依赖哪些动态库:
ldd 程序
示例1:
mayue:~/nfs/gdb$ ldd gdbserver
checking sub-depends for 'not found'
checking sub-depends for 'not found'
checking sub-depends for 'not found'
libdl.so.0 => not found (0x00000000)
libm.so.0 => not found (0x00000000)
libc.so.0 => not found (0x00000000)
/lib/ld-uClibc.so.0 => /lib/ld-uClibc.so.0 (0x00000000)
示例2:
mayue:~/nfs/gdb$ ldd 60pe
checking sub-depends for 'not found'
checking sub-depends for 'not found'
checking sub-depends for 'not found'
checking sub-depends for 'not found'
checking sub-depends for 'not found'
libsqlite3.so => not found (0x00000000)
libpthread.so.0 => not found (0x00000000)
libdl.so.0 => not found (0x00000000)
librt.so.0 => not found (0x00000000)
libc.so.0 => not found (0x00000000)
/lib/ld-uClibc.so.0 => /lib/ld-uClibc.so.0 (0x00000000)
注意事项:动态链接库的调用前提要设置好环境变量
查看程序依赖的动态库:
readelf -a xxx|grep library
示例
mayue:~/nfs/gdb$ readelf -a 60pe|grep library
0x00000001 (NEEDED) Shared library: [libsqlite3.so]
0x00000001 (NEEDED) Shared library: [libpthread.so.0]
0x00000001 (NEEDED) Shared library: [libdl.so.0]
0x00000001 (NEEDED) Shared library: [librt.so.0]
0x00000001 (NEEDED) Shared library: [libc.so.0]