在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]

本文介绍在Linux环境下如何检查程序的动态链接库依赖,使用ldd命令和readelf工具,确保程序在不同计算机上能够顺利运行。文章提供具体示例并强调环境变量设置的重要性。

762

被折叠的 条评论
为什么被折叠?



