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

1
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

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

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

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

1
2
3
$ arm-linux-gnueabihf-readelf -a fswebcam |  grep "Shared library:"
0x00000001 (NEEDED) Shared library: [libgd.so.3]
0x00000001 (NEEDED) Shared library: [libc.so.6]