Дополнительно
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, но результат тот же.
94
7
Вы пытаетесь запустить исполняемый файл, скомпилированный для архитектуры ARM, на архитектуре x86-64, а это все равно, что попросить процессор, говорящий только на английском, принять указания на китайском.
Если вам нужно запустить этот исполняемый файл, у вас есть два варианта:
Получить x86-64 версию исполняемого файла (любым способом; если вы не можете получить x86-64 версию исполняемого файла, но можете получить его исходный код, вы можете попробовать перекомпилировать его на виртуальной машине);
Установите Ubuntu Server for ARM вместо Ubuntu 14.04.2 (amd64). Для этого требуется либо физическая машина, работающая на архитектуре ARM, либо программа виртуализации, которая может ее эмулировать.
Это также может произойти, если вы попытаетесь запустить исполняемый файл x86-64 на 32-битной платформе.
В одном конкретном случае я загрузил Visual Studio Code и попытался запустить его на моей установке Ubuntu, но я не понял, что установил 32-битную Ubuntu в эту виртуальную машину. Я получил эту ошибку, но после загрузки 32-битной версии она запустилась без проблем.
Очень часто можно запустить руку исполняемого образа в системе с архитектурой amd64, если вы установите binfmt-поддержка , в QEMU , и в QEMU-пользователей-статический пакеты:
в QEMU
выполнит системный вызов эмуляции при запуске исполняемого файла. Это работает для большинства бинарные руке, но есть несколько, которые могут работать неправильно.Такая ошибка может возникнуть, если верно все перечисленное ниже:
Если вы получили этот файл, скажем, в архиве - попробуйте распаковать его внутри VM, в какую-нибудь директорию внутри виртуального диска, а не в папку, отображенную на жесткий диск хост-машины, например
/myNewDir/
.Вы должны скомпилировать файл с помощью соответствующего архитектура процессора (x86 например) и скопировать .exe-файла на компьютере под управлением Linux. Затем вы можете установить Mono на Linux-машину и выполните следующую команду:
Если больше, чем один
Ява
, установленной в системе это может произойти и не по умолчанию. На Ubuntu14.04 ЛТС я мог получить его решена путем выполнения следующих и выбравЯва
мне нужно.Я выбираю 2 и сеть пакеты OpenJDK-8
по умолчанию. Который не показал ошибок формате exec
.Это также может произойти, если бинарные использует реализацией libc, которая не библиотеки libc, например, musl. В эти дни данная проблема является, скорее всего, столкнулись при попытке запуска двоичного файла с libc в контейнер Docker с изображением на основе альпийских. Нет ничего, что можно сделать для себя бинарных для поддержки обеих средах, поскольку реализацией libc всегда должны быть статически, т. е. построенный прямо в бинарный файл, для причинам.