【问题标题】:"cannot execute binary file: Exec format error"occured after compile c program to mips binary file将c程序编译为mips二进制文件后出现“无法执行二进制文件:执行格式错误”
【发布时间】: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 目标选择一个。

标签: c gcc mips


【解决方案1】:

如果您进行交叉编译,您就是在告诉:获取此源代码并将其转换为机器可读格式不是针对这台计算机,而是针对其他计算机/架构/系统。

因此,为 MIPS 翻译的文件无法在 amd64 上运行,因为它们是完全不同的架构,具有完全不同的指令。

尝试在适当的架构上运行 - 在您的情况下是 MIPS64 GNU/Linux 计算机

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2016-04-11
    • 1970-01-01
    • 1970-01-01
    • 2016-02-07
    • 2011-04-14
    • 2019-12-25
    • 2021-09-25
    相关资源
    最近更新 更多