Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/c/58.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
&引用;无法执行二进制文件:Exec格式错误";将c程序编译为mips二进制文件后发生_C_Gcc_Mips - Fatal编程技术网

&引用;无法执行二进制文件:Exec格式错误";将c程序编译为mips二进制文件后发生

&引用;无法执行二进制文件:Exec格式错误";将c程序编译为mips二进制文件后发生,c,gcc,mips,C,Gcc,Mips,警告、二进制文件和系统arch的详细信息如下所示。c程序包含一个主函数和一个简单的加法函数。没有要包含的外部文件 zfq@inginging:~/study/sandbox$ mips64-linux-gnuabi64-gcc sandbox.c zfq@inginging:~/study/sandbox$ ls a.out sandbox.c sandbox.h sandbox.s zfq@inginging:~/study/sandbox$ file a.out a.out: ELF

警告、二进制文件和系统arch的详细信息如下所示。c程序包含一个主函数和一个简单的加法函数。没有要包含的外部文件

zfq@inginging:~/study/sandbox$ mips64-linux-gnuabi64-gcc sandbox.c
zfq@inginging:~/study/sandbox$ ls
a.out  sandbox.c  sandbox.h  sandbox.s
zfq@inginging:~/study/sandbox$ file a.out
a.out: ELF 64-bit MSB executable, MIPS, MIPS64 rel2 version 1 (SYSV), dynamically linked, interpreter /lib64/ld.so.1, BuildID[sha1]=a16c9c7aba78aa5adcf89b053bdd3c58a7cbe330, for GNU/Linux 3.2.0, not stripped
zfq@inginging:~/study/sandbox$ cat /proc/version
Linux version 5.4.0-65-generic (buildd@lgw01-amd64-048) (gcc version 7.5.0 (Ubuntu 7.5.0-3ubuntu1~18.04)) #73~18.04.1-Ubuntu SMP Tue Jan 19 09:02:24 UTC 2021
zfq@inginging:~/study/sandbox$ ./a.out
bash: ./a.out: cannot execute binary file: Exec format error

即使系统是x86_64体系结构,并且elf文件也是64位的,二进制文件仍然存在格式错误。有人遇到过这样的问题吗?

如果你交叉编译,你就是在说:把这些源代码翻译成机器可读的格式,不是针对这台计算机,而是针对其他计算机/体系结构/系统

因此,为MIPS翻译的文件不能在amd64上运行,因为它们是完全不同指令的完全不同的体系结构

尝试在适当的体系结构下运行—在您的例子中是一台MIPS64 GNU/Linux计算机


或者简单地使用本机gcc或其他cc为要编译的系统生成二进制文件。

您的主机是amd64(英特尔x64),二进制文件是MIPS64,这是一个具有不同指令的完全不同的CPU。它不能在CPU上运行。交叉编译基本上意味着“我希望这个编译后的程序在其他架构上运行”。那么,在另一个架构上运行它吧!:)我的意思是:你费心处理交叉编译,大概是有原因的吧?也可能是因为您使用的是预配置的环境,只是为了完成任务而选择了错误的编译器:也许仅仅使用普通的
gcc
就可以实现您想要的功能,而不是为MIPS目标或QEMU选择一个。。。。。。。