当前位置: 首页>>技术教程>>正文


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,但结果是一样的。

最佳解决方案

您正在尝试在x86-64架构上运行为ARM体系结构编译的可执行文件,这就像询问只会说英语的处理器以中文方向一样。

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

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

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

次佳解决方案

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

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

第三种解决方案

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

executable,ubuntu

executable,ubuntu

executable,ubuntu

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

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

第四种方案

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

  • 可执行文件不是文件而是链接

  • 你在VM内部运行它

  • 文件位于共享文件夹中

  • 你的主机是Windows。

如果你有这个文件,让我们说,在存档中 – 尝试在VM内部解压缩,在虚拟驱动器内的某个目录中,而不是映射到主机硬盘的文件夹,例如/myNewDir/

第五种方案

如果系统上安装了多个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

参考资料

本文由Ubuntu问答整理, 博文地址: https://ubuntuqa.com/article/1367.html,未经允许,请勿转载。