如何查看arm可执行文件的依赖

在 arm 设备上执行可执行程序时报错,缺少库文件,类似如下报错

fswebcam: error while loading shared libraries: libgd.so.3: cannot open shared object file: No such file or directory

担心复制 libgd.so.3 库文件到文件系统后还有其他的依赖缺失,决定先确定可执行文件的动态库依赖

在网上搜索到可以使用 ldd 进行查看,然而交叉编译工具链并没有提供 ldd 这么一个东西

最后在网上看到一篇文章提到了这个问题交叉编译 – 交叉编译ldd

将下面这段程序保存为脚本,执行后就可以查看可执行程序的依赖

#!/bin/sh
arm-none-linux-gnueabi-readelf -a $1 | grep "Shared library:"

以本人用到的 fswebcam 这个文件为例,命令执行后,输出所有的库的依赖

$ arm-linux-gnueabihf-readelf -a fswebcam |  grep "Shared library:"
 0x00000001 (NEEDED)                     Shared library: [libgd.so.3]
 0x00000001 (NEEDED)                     Shared library: [libc.so.6]
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
本人最近在学习利用c语言将字符串转成图片的操作,碰巧在网上看到有大神提到可以用这个第三方库,发现功能挺强大的。 官网地址:https://libgd.github.io/ 使用过程中出现的问题:在编译运行测试代码时,提示error while loading shared libraries: libgd.so.3: cannot open shared object file: No such file or directory。 解决方案: 默认情况下,编译器只会使用/lib和/usr/lib这两个目录下的库文件,通常通过源码包进行安装时,如果不指定--prefix,会将库安装在/usr/local/lib目录下;当运行程序需要链接动态库时,提示找不到相关的.so库,会报错。也就是说,/usr/local/lib目录不在系统默认的库搜索目录中,需要将目录加进去。   1、首先打开/etc/ld.so.conf文件   2、加入动态库文件所在的目录:执行vi /etc/ld.so.conf,在"include ld.so.conf.d/*.conf"下方增加"/usr/local/lib"。   3、保存后,在命令行终端执行:/sbin/ldconfig -v;其作用是将文件/etc/ld.so.conf列出的路径下的库文件缓存到/etc/ld.so.cache以供使用,因此当安装完一些库文件,或者修改/etc/ld.so.conf增加了库的新搜索路径,需要运行一下ldconfig,使所有的库文件都被缓存到文件/etc/ld.so.cache中,如果没做,可能会找不到刚安装的库。   经过以上三个步骤,"error while loading shared libraries"的问题通常情况下就可以解决了。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值