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

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

我正在尝试运行一个程序,但它给出了一个错误:

bash: ./program: cannot execute binary file: Exec format error

结果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

我怎样才能解决这个问题?

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

答案1

您正尝试在 x86-64 架构上运行为 ARM 架构编译的可执行文件,这就像要求只会说英语的处理器用中文接受指示一样。

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

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

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

答案2

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

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

答案3

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

sudo apt install binfmt-support qemu qemu-user-static

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

答案4

java如果系统上安装了多个,则可能会发生这种情况,并且不会设置为默认值。在 Ubuntu14.04 LTS 上,我可以通过执行以下命令并选择java我需要的来解决此问题。

sudo update-alternatives --config java
[sudo] password for user: 
update-alternatives: warning: /etc/alternatives/java has been changed (manually or by a script); switching to manual updates only
There are 2 choices for the alternative java (providing /usr/bin/java).

  Selection    Path                                            Priority   Status
------------------------------------------------------------
  0            /usr/lib/jvm/java-7-openjdk-amd64/jre/bin/java   1071      auto mode
  1            /usr/lib/jvm/java-7-openjdk-amd64/jre/bin/java   1071      manual mode
  2            /usr/lib/jvm/java-8-openjdk-amd64/jre/bin/java   1069      manual mode

Press enter to keep the current choice[*], or type selection number: 2
update-alternatives: using /usr/lib/jvm/java-8-openjdk-amd64/jre/bin/java to provide /usr/bin/java (java) in manual mode

我选择 2 并设置openjdk-8为默认值。其中没有显示Exec format error

相关内容