bash: ./program: невозможно выполнить двоичный файл: Ошибка формата выполнения

Я'пытаюсь запустить программу, но происходит вот такая ошибка:

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

The result of file program was:

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

Как я могу исправить эту ошибку?

Я использую Ubuntu 14.04.2 (amd64) с VMware. Я также пробовал с Ubuntu i386, но результат тот же.

Комментарии к вопросу (1)

Вы пытаетесь запустить исполняемый файл, скомпилированный для архитектуры ARM, на архитектуре x86-64, а это все равно, что попросить процессор, говорящий только на английском, принять указания на китайском.

Если вам нужно запустить этот исполняемый файл, у вас есть два варианта:

  1. Получить x86-64 версию исполняемого файла (любым способом; если вы не можете получить x86-64 версию исполняемого файла, но можете получить его исходный код, вы можете попробовать перекомпилировать его на виртуальной машине);

  2. Установите Ubuntu Server for ARM вместо Ubuntu 14.04.2 (amd64). Для этого требуется либо физическая машина, работающая на архитектуре ARM, либо программа виртуализации, которая может ее эмулировать.

Комментарии (0)

Это также может произойти, если вы попытаетесь запустить исполняемый файл x86-64 на 32-битной платформе.

В одном конкретном случае я загрузил Visual Studio Code и попытался запустить его на моей установке Ubuntu, но я не понял, что установил 32-битную Ubuntu в эту виртуальную машину. Я получил эту ошибку, но после загрузки 32-битной версии она запустилась без проблем.

Комментарии (0)

Очень часто можно запустить руку исполняемого образа в системе с архитектурой amd64, если вы установите binfmt-поддержка , в QEMU , и в QEMU-пользователей-статический пакеты:

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

в QEMU выполнит системный вызов эмуляции при запуске исполняемого файла. Это работает для большинства бинарные руке, но есть несколько, которые могут работать неправильно.

Комментарии (1)

Такая ошибка может возникнуть, если верно все перечисленное ниже:

  • Исполняемый файл - это не файл, а ссылка.
  • Вы запускаете его внутри виртуальной машины
  • Файл находится в общей папке
  • Ваш хост - Windows.

Если вы получили этот файл, скажем, в архиве - попробуйте распаковать его внутри VM, в какую-нибудь директорию внутри виртуального диска, а не в папку, отображенную на жесткий диск хост-машины, например /myNewDir/.

Комментарии (1)

Вы должны скомпилировать файл с помощью соответствующего архитектура процессора (x86 например) и скопировать .exe-файла на компьютере под управлением Linux. Затем вы можете установить Mono на Linux-машину и выполните следующую команду:

mono myprogram.exe
Комментарии (0)

Если больше, чем один Ява, установленной в системе это может произойти и не по умолчанию. На Ubuntu14.04 ЛТС я мог получить его решена путем выполнения следующих и выбрав Ява мне нужно.

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.

Комментарии (0)

Это также может произойти, если бинарные использует реализацией libc, которая не библиотеки libc, например, musl. В эти дни данная проблема является, скорее всего, столкнулись при попытке запуска двоичного файла с libc в контейнер Docker с изображением на основе альпийских. Нет ничего, что можно сделать для себя бинарных для поддержки обеих средах, поскольку реализацией libc всегда должны быть статически, т. е. построенный прямо в бинарный файл, для причинам.

Комментарии (0)