bash: ./program: 无法执行二进制文件: Exec 格式错误

Soo*_*ang 133 executable

我正在尝试运行一个程序,但发生了这样的错误:

bash: ./program: cannot execute binary file: Exec format error
Run Code Online (Sandbox Code Playgroud)

结果file program是:

program: ELF-32-bit LSB executable, ARM, EABI4 version 1 (SYSV), dynamically linked(uses share libs), for GNU/LINUX 2.6.16, not stripped
Run Code Online (Sandbox Code Playgroud)

我该如何解决这个错误?

我在 VMware 上使用 Ubuntu 14.04.2 (amd64)。我也尝试过 Ubuntu i386,但结果是一样的。

kos*_*kos 123

您正在尝试在 x86-64 体系结构上运行为 ARM 体系结构编译的可执行文件,这很像要求只会说英语的处理器用中文指导。

如果您需要运行该可执行文件,您有两种选择:

  1. 获取 x86-64 版本的可执行文件(无论如何;如果您无法获取 x86-64 版本的可执行文件,但可以获取其源代码,则可以尝试在虚拟机上重新编译它);

  2. 安装Ubuntu Server for ARM代替 Ubuntu 14.04.2 (amd64)。这需要在 ARM 架构上运行的物理机或可以模拟它的虚拟化软件。


小智 24

如果您尝试在 32 位平台上运行 x86-64 可执行文件,也会发生这种情况。

在一个特定的例子中,我下载了 Visual Studio Code 并尝试在我的 Ubuntu 安装上运行它,但我没有意识到我在这个 VM 中安装了 32 位 Ubuntu。我收到此错误,但下载 32 位版本后,它运行没有问题。


Nat*_*man 13

如果安装binfmt-support,通常可以在 amd64 系统上运行 ARM 可执行映像安装 binfmt-support, qem安装 qemu, 和qemu-user-static安装 qemu-user-static 包:

sudo apt install binfmt-support qemu qemu-user-static
Run Code Online (Sandbox Code Playgroud)

qemu然后将在您运行可执行文件时执行系统调用仿真。这适用于大多数 ARM 二进制文件,但有一些可能无法正确运行。


Pav*_*vel 9

如果以下所有条件都为真,则可能会发生此类错误:

  • 可执行文件不是文件而是链接
  • 你在虚拟机内运行运行它
  • 文件位于共享文件夹中
  • 您的主机是 Windows。

如果你有那个文件,比方说,在存档中 - 尝试将它解压到 VM 内,在虚拟驱动器内的某个目录中,而不是映射到主机硬盘驱动器的文件夹,例如 /myNewDir/