Yocto开发笔记之《Tip-应用程序无法在目标机运行》(QQ交流群:519230208)

官方app编译环境编译的应用程序可以在开发板自带的系统中运行,自己编译并烧写了系统,却提示:

root@imx6ulevk:/root# ./VTTerminal 
-sh: ./VTTerminal: No such file or directory

查看文件信息,发现没有什么错误

root@imx6ulevk:/root# file VTTerminal
VTTerminal: ELF 32-bit LSB executable, ARM, EABI5 version 1 (SYSV), dynamically linked, interpreter /lib/ld-linux.so.3, for GNU/Linux 2.6.32, BuildIDd

tony建议查看下是否缺少相关库,于是我查看依赖:

root@imx6ulevk:/root# arm-poky-linux-gnueabi-readelf -a VTTerminal | grep "Shared"
 0x00000001 (NEEDED)                     Shared library: [libpthread.so.0]
 0x00000001 (NEEDED)                     Shared library: [libc.so.6]

然后跑到/lib, /usr/lib下查看库是否缺失,答案为否,使用ld debug和strace命令继续追踪

root@imx6ulevk:~# strace -f -F -o ~/log.txt ./VTTerminal

log文件为
962   execve("./VTTerminal", ["./VTTerminal"], [/* 15 vars */]) = -1 ENOENT (No
962   write(2, "strace: exec: No such file or di"..., 40) = 40
962   exit_group(1)                     = ?
962   +++ exited with 1 +++

在自己的image上不能执行的文件属性:

summer@summer-ThinkPad-X230:/nfsroot/workspace/hello$ file hello
hello: ELF 32-bit LSB executable, ARM, EABI5 version 1 (SYSV), dynamically linked, interpreter /lib/ld-linux.so.3, for GNU/Linux 2.6.32, BuildID[sha1]=3801ca19875a1f217a660eab159099fddbd90974, not stripped

tony提供的可以执行的文件

summer@summer-ThinkPad-X230:/nfsroot/tonys$ file hello 
hello: ELF 32-bit LSB executable, ARM, EABI5 version 1 (SYSV), dynamically linked, interpreter /lib/ld-linux-armhf.so.3, for GNU/Linux 2.6.32, BuildID[sha1]=312402ec4e4e472214fbf65068ac3a5ebcb24919, stripped

最终解决方式如下:

cp /lib/ld-linux-armhf.so.3 /lib/ld-linux.so.3
这种情况应该用multi arch来解决比较合适
Tony 18:54:23
直接拷贝并不好
summer 18:55:07
会引入其他问题对吗
Tony 18:55:21
你的环境不统一
原文地址:https://www.cnblogs.com/alanfang/p/5082353.html