yocto linux执行可执行文件报错:no such file or directory
在ubuntu 14.04中下载了yocto 1.7 x86-64的kernel/rootfs image,通过qemu启动虚拟机进入到yocto系统,在yocto中执行host机器(host机器也是x86_64)编译出的可执行文件时,遇到"no such file or directory错误"。在网络上搜罗了一下,遇到这种问题的人不少,绝大多数是在嵌入式系统中。例如:https://yoc..
在ubuntu 14.04中下载了yocto 1.7 x86-64的kernel/rootfs image,通过qemu启动虚拟机进入到yocto系统,在yocto中执行host机器(host机器也是x86_64)编译出的可执行文件时,遇到"no such file or directory错误"。
在网络上搜罗了一下,遇到这种问题的人不少,绝大多数是在嵌入式系统中。
例如:https://yocto.yoctoproject.narkive.com/VSV7dY9A/cannot-run-simple-binary-executable-file
根据作者给出的地址,我查看了原贴信息:
https://stackoverflow.com/questions/24543474/cross-compiled-gnu-arm-beagleboneblack-from-windows-runtime-error-on-elf
哦,原来问题所在是ld-linux.so。这个so是干嘛的呢?再次google,查到:https://www.cnblogs.com/sun-frederick/p/4763460.html
“/lib/ld-linux.so.2以及它的64位版本/lib64/ld-linux-x86-64.so.2虽然看起来是共享库文件,但实际上他们可以独立运行。他们的功能是负责动态加载。它们通过读取可执行文件的头部信息来确定哪些库文件是必须的,以及哪些需要加载。加载完成后,它会通过修正执行文件里的相关的地址指针来和加载的库文件完成动态链接,此时程序就可以运行了。”
好,看来是对动态库进行查找、加载和链接的。
立马在我的yocto环境中通过readelf -l命令,发现我的可执行文件需要:/lib64/ld-linux-x86-64.so.2
但我的yocto系统中没有这个,而拥有:/lib/ld-linux-x86-64.so.2 -> ld-2.20.so
所以做了个软连接,让前者指向后者,再次运行程序,问题解决~!
更多推荐
所有评论(0)