在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
所以做了个软连接,让前者指向后者,再次运行程序,问题解决~!

Logo

华为开发者空间,是为全球开发者打造的专属开发空间,汇聚了华为优质开发资源及工具,致力于让每一位开发者拥有一台云主机,基于华为根生态开发、创新。

更多推荐