【发布时间】:2021-02-26 15:38:02
【问题描述】:
警告、二进制文件和系统架构的详细信息如下。 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位,二进制文件仍然存在格式错误。有没有人遇到过这样的问题?
【问题讨论】:
-
你的主机是amd64(intel x64),二进制是MIPS64,这是一个完全不同的CPU,不同的指令。它不能在你的 CPU 上运行。
-
交叉编译基本上意味着“我希望这个编译的程序在其他架构上运行”。好吧,然后在其他架构上运行它! :) 我的意思是:你不厌其烦地进行交叉编译,大概是有原因的?也可能是您正在使用预配置的环境,并且只是设法为该工作选择了错误的编译器:也许只使用普通的
gcc会做您想要的,而不是为 MIPS 目标选择一个。