linux查看一个c程序依赖的动态链接库

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

参考资料
https://www.cnblogs.com/qingchen1984/p/7260801.html

  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: 你可以使用 `ldd` 命令来查看一个 Linux 程序需要调用哪些共享库。这个命令会列出程序依赖动态链接库的路径。 具体来说,可以在终端中输入以下命令: ``` ldd /path/to/your/program ``` 其中,`/path/to/your/program` 是你要查看程序的路径。该命令会输出程序依赖动态链接库的路径列表,如: ``` linux-vdso.so.1 => (0x00007ffd43756000) libpthread.so.0 => /lib/x86_64-linux-gnu/libpthread.so.0 (0x00007f708d7a5000) libm.so.6 => /lib/x86_64-linux-gnu/libm.so.6 (0x00007f708d49c000) libc.so.6 => /lib/x86_64-linux-gnu/libc.so.6 (0x00007f708d0d6000) /lib64/ld-linux-x86-64.so.2 (0x00007f708d9dd000) ``` 其中每一行包含库的路径和在程序中的地址。需要调用的库路径通常以 `lib` 开头。例如,上面的输出中程序需要调用 `libpthread.so.0`,`libm.so.6` 和 `libc.so.6` 这三个库。 ### 回答2: 要查看一个Linux程序需要调用哪些库,可以使用以下几种方法: 1. 使用ldd命令:ldd命令可以列出一个可执行文件所依赖的共享库。在终端中输入ldd加上程序的路径,如:ldd /path/to/program。系统会输出该程序依赖的共享库列表。 2. 使用readelf命令:readelf命令是GNU Binutils软件包中的工具之一,可用于查看可执行文件的结构信息。在终端中输入readelf加上程序的路径,如:readelf -d /path/to/program。系统会输出该程序的动态结构信息,包括所依赖的共享库。 3. 使用objdump命令:objdump命令也是Binutils软件包中的工具之一,可以对可执行文件进行反汇编。在终端中输入objdump加上程序的路径,如:objdump -p /path/to/program。系统会输出该程序的段头信息,包括所依赖的共享库。 通过以上方法,我们可以查看一个Linux程序需要调用哪些库。这对于程序的开发、调试和部署都非常重要,可以帮助我们确保所需的库已经安装,并能够正确地加载和运行程序。 ### 回答3: 在Linux系统中,可以使用ldd命令来查看一个程序需要调用哪些库。 使用方法如下: 1. 打开终端窗口,在命令行中输入ldd,然后在空格后加上待查询程序的路径,按下回车键。 示例:ldd /usr/bin/gcc 这将显示出gcc程序所需要调用的所有库文件。 2. 当执行ldd命令后,终端会输出一段关于这个程序动态链接库(也称为共享库)的信息。每行的开头是共享库的路径,紧随其后是共享库的路径的匹配类型。 示例:/lib64/ld-linux-x86-64.so.2 (0x7f7abffff000) 这是程序依赖的动态链接器库,用于加载和链接其他共享库。 示例:libpthread.so.0 => /lib/x86_64-linux-gnu/libpthread.so.0 (0x7f7ac01bf000) 这是程序依赖的线程库,用于支持多线程编程。 示例:libm.so.6 => /lib/x86_64-linux-gnu/libm.so.6 (0x7f7abf0a0000) 这是程序依赖的数学库,用于进行数学计算。 3. 通过不断查看终端输出的信息,你可以了解到程序所需要调用的所有库文件。 需要注意的是,如果某个库文件不存在或者不可访问,ldd命令将会输出"not found"的提示信息。如果某个库文件无法找到,可能会导致程序无法正常运行。 通过使用ldd命令,我们可以方便地查看一个Linux程序需要调用哪些库,这对于排查程序依赖问题和解决运行时错误非常有帮助。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值