最近在做tcu 的项目,重新移植了文件系统。运行客户的提供的程序报错:
和客户沟通,交叉编译工具版本是一致的,感觉是缺少动态库
用dd命令查看,但是这ldd无法显示,
developer-RH2485-V2:$ ldd qrencode
not a dynamic executable
在网上看了看 ,找到了一种方式 使用readelf
readelf -l qrencode | grep ld-linux
[Requesting program interpreter: /lib/ld-linux-armhf.so.3
说明运行该文件需要/lib/ld-linux-armhf.so.3文件。
查看/lib目录,在 lib目录下确实没用ld-linux-armhf.so.3
在lib目录下建立软链接
ln -s ld-2.19-2014.08-1-git.so ld-linux-armhf.so.3
sync
再次运行
解决!
在板子上通过file命令查看 报错和不报错的二进制
可以看出两者的interpreter(解释器)不同。解释器负责加载动态库
readelf命令是Linux下的分析ELF文件的命令,这个命令在分析ELF文件格式时非常有用,下面以ELF格式可执行文件test为例详细介绍: readelf -v 显示版本 readelf -h 显示帮助 readelf -a test 显示test的全部信息 readelf -h test 显示test的ELF Header的文件头信息(就是ELF文件开始的前52个字节) readelf -l test 显示test的Program Header Table中的每个Prgram Header Entry的信息(如果有) readelf -S test 显示test的Section Header Table中的每个Section Header Entry的信息(如果有) readelf -g test 显示test的Section Group的信息(如果有) readelf -s test 显示test的Symbol Table中的每个Symbol Table Entry的信息(如果有) readelf -e test 显示test的全部头信息(包括ELF Header,Section Header和Program Header,等同与 readelf -h -l -S test) readelf -n test 显示test的note段的信息(如果有) readelf -r test 显示test中的可重定位段的信息(如果有) readelf -d test 显示test中的Dynamic Section的信息(如果有) readelf -V test 显示test中的GNU Version段信息(如果有) 其实上述的命令只是把ELF文件格式的不同部分输出而已,只要了解ELF文件格式后这些命令就不难了啦~~
版权声明:本文为boyemachao原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。