执行linux 命令行程序not found 错误

  • Post author:
  • Post category:linux


最近在做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(解释器)不同。解释器负责加载动态库


关于ld-linux.so.3

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 版权协议,转载请附上原文出处链接和本声明。