我正在编译一些C代码,打算在MipsLinuxo32嵌入式系统上执行它。我有一些简单的C代码,
#include <stdio.h>
void main(){
printf("Hello world");
}
并将其编译为
mips-linux-gnu-gcc -mfp32 helloworld.c
我知道我不能在我的linux机器上运行它,所以为了测试它,我首先得到了qemu,并试图用
qemu-mips ./a.out
但我收到错误
qemu-mips: Could not open '/lib/ld.so.1': No such file or directory
我怀疑这与我包含stdio.h但没有链接它的事实有关。我该如何修复这个问题。
我希望代码能够运行。
1条答案
按热度按时间bxjv4tth1#
出现错误
无法打开“/lib/ld.so.1”:无此文件或目录
我怀疑这与我包括stdio.h但没有链接它的事实有关。
这是因为你已经编译了一个动态链接的可执行文件,你应该可以在
readelf -l a.out | grep interpreter
的输出中看到它,所以当你运行它的时候,QEMU需要目标动态链接器,但是它找不到,因为/lib
包含了你的宿主二进制文件,里面没有ld.so.1
。可以通过构建静态可执行文件(
mips-linux-gnu-gcc -mfp32 -static helloworld.c
)或在QEMU命令行(qemu-mips -L<path to directory with MIPS rootfs> ./a.out
)中提供目标MIPS rootfs(包含lib/ld.so.1
和其他所需库)的位置来修复。