I’m trying to run a program, but it gives an error:
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
How can I fix this?
I’m using Ubuntu 14.04.2 (amd64) with VMware. I also tried using Ubuntu i386, but the result was the same.
asked Jul 15, 2015 at 5:30
Soongeun HwangSoongeun Hwang
1,5012 gold badges9 silver badges4 bronze badges
1
You’re trying to run an executable compiled for an ARM architecture on an x86-64 architecture, which is much like asking your processor who only speaks English to take directions in Chinese.
If you need to run that executable you have two choices:
-
Get an x86-64 version of the executable (by any mean; if you’re unable to get an x86-64 version of the executable but you’re able to get its source code, you can try to recompile it on the virtual machine);
-
Install Ubuntu Server for ARM in place of Ubuntu 14.04.2 (amd64). This requires either a physical machine running on an ARM architecture or a virtualization software that can emulate it.
answered Jul 15, 2015 at 5:39
1
This can also occur if you attempt to run an x86-64 executable on a 32-bit platform.
In one specific instance, I downloaded Visual Studio Code and tried to run it on my Ubuntu installation, but I hadn’t realized that I had installed 32-bit Ubuntu in this VM. I got this error, but after downloading the 32-bit version, it ran without issue.
answered Sep 10, 2015 at 23:44
It is often possible to run an ARM executable image on an amd64 system if you install the binfmt-support
, qemu
, and qemu-user-static
packages:
sudo apt install binfmt-support qemu qemu-user-static
qemu
will then perform syscall emulation when you run the executable. This works for most ARM binaries but there are a few that may not run correctly.
answered Oct 27, 2016 at 6:41
Nathan OsmanNathan Osman
31.9k40 gold badges177 silver badges259 bronze badges
2
Such error may occur if all of the following are true:
- Executable is not a file but a link
- You run run it inside VM
- File is located in shared folder
- Your host is Windows.
If you got that file, let’s say, in archive — try to unpack it inside VM, in some directory inside virtual drive, not folder mapped to your host machine hard drive, for example /myNewDir/
wjandrea
14k4 gold badges46 silver badges98 bronze badges
answered Nov 13, 2015 at 22:22
PavelPavel
3631 gold badge3 silver badges10 bronze badges
1
If more than one java
is installed on the system this might happen and not set as default. On Ubuntu14.04 LTS I could get it resolved by executing following and choosing the java
I needed.
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
I choose 2 and set openjdk-8
as a default. Which did not show the Exec format error
.
Videonauth
32.9k16 gold badges104 silver badges119 bronze badges
answered Jun 6, 2016 at 13:43
You must compile your file using an appropriate CPU architecture (x86 for example) and copy the .exe file on your linux machine. Then you can install mono on your linux machine and issue the following command:
mono myprogram.exe
muru
192k52 gold badges468 silver badges719 bronze badges
answered Feb 28, 2016 at 19:49
1
This can also happen if the binary uses a libc implementation which is not libc, such as musl. These days this specific problem is most likely encountered when trying to run a binary with libc in a Docker container with an image based on alpine. There is nothing that can be done to the binary itself to support both environments, because the libc implementation must always be linked statically, i.e. built directly into the binary, for reasons.
answered Jul 16, 2019 at 16:44
I got this error trying to run a zip file containing an executable rather than extracting it and running the executable itself xD
In addition to the other answers offered here, I suppose there would be a lot of file types that aren’t intended to be executable which could cause this error.
answered May 19, 2020 at 6:05
1
This is another special case: WSL (Windows Subsystem for Linux) by default(!) only supports 64bit executables. I think this is a rather unusual behaviour, as normally there is a backwards compatibility.
(Even more special is that selecting 64bit in a formerly 32bit project of Windev won’t fix your issue. You need to start a new project, selecting 64bit right in the beginning. Tested on Windev 26. This IDE sucks, forced to use it because of working legacy code.)
answered Jul 21, 2022 at 23:23
PythoNicPythoNic
6661 gold badge5 silver badges15 bronze badges
2
I’m trying to run a program, but it gives an error:
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
How can I fix this?
I’m using Ubuntu 14.04.2 (amd64) with VMware. I also tried using Ubuntu i386, but the result was the same.
asked Jul 15, 2015 at 5:30
Soongeun HwangSoongeun Hwang
1,5012 gold badges9 silver badges4 bronze badges
1
You’re trying to run an executable compiled for an ARM architecture on an x86-64 architecture, which is much like asking your processor who only speaks English to take directions in Chinese.
If you need to run that executable you have two choices:
-
Get an x86-64 version of the executable (by any mean; if you’re unable to get an x86-64 version of the executable but you’re able to get its source code, you can try to recompile it on the virtual machine);
-
Install Ubuntu Server for ARM in place of Ubuntu 14.04.2 (amd64). This requires either a physical machine running on an ARM architecture or a virtualization software that can emulate it.
answered Jul 15, 2015 at 5:39
1
This can also occur if you attempt to run an x86-64 executable on a 32-bit platform.
In one specific instance, I downloaded Visual Studio Code and tried to run it on my Ubuntu installation, but I hadn’t realized that I had installed 32-bit Ubuntu in this VM. I got this error, but after downloading the 32-bit version, it ran without issue.
answered Sep 10, 2015 at 23:44
It is often possible to run an ARM executable image on an amd64 system if you install the binfmt-support
, qemu
, and qemu-user-static
packages:
sudo apt install binfmt-support qemu qemu-user-static
qemu
will then perform syscall emulation when you run the executable. This works for most ARM binaries but there are a few that may not run correctly.
answered Oct 27, 2016 at 6:41
Nathan OsmanNathan Osman
31.9k40 gold badges177 silver badges259 bronze badges
2
Such error may occur if all of the following are true:
- Executable is not a file but a link
- You run run it inside VM
- File is located in shared folder
- Your host is Windows.
If you got that file, let’s say, in archive — try to unpack it inside VM, in some directory inside virtual drive, not folder mapped to your host machine hard drive, for example /myNewDir/
wjandrea
14k4 gold badges46 silver badges98 bronze badges
answered Nov 13, 2015 at 22:22
PavelPavel
3631 gold badge3 silver badges10 bronze badges
1
If more than one java
is installed on the system this might happen and not set as default. On Ubuntu14.04 LTS I could get it resolved by executing following and choosing the java
I needed.
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
I choose 2 and set openjdk-8
as a default. Which did not show the Exec format error
.
Videonauth
32.9k16 gold badges104 silver badges119 bronze badges
answered Jun 6, 2016 at 13:43
You must compile your file using an appropriate CPU architecture (x86 for example) and copy the .exe file on your linux machine. Then you can install mono on your linux machine and issue the following command:
mono myprogram.exe
muru
192k52 gold badges468 silver badges719 bronze badges
answered Feb 28, 2016 at 19:49
1
This can also happen if the binary uses a libc implementation which is not libc, such as musl. These days this specific problem is most likely encountered when trying to run a binary with libc in a Docker container with an image based on alpine. There is nothing that can be done to the binary itself to support both environments, because the libc implementation must always be linked statically, i.e. built directly into the binary, for reasons.
answered Jul 16, 2019 at 16:44
I got this error trying to run a zip file containing an executable rather than extracting it and running the executable itself xD
In addition to the other answers offered here, I suppose there would be a lot of file types that aren’t intended to be executable which could cause this error.
answered May 19, 2020 at 6:05
1
This is another special case: WSL (Windows Subsystem for Linux) by default(!) only supports 64bit executables. I think this is a rather unusual behaviour, as normally there is a backwards compatibility.
(Even more special is that selecting 64bit in a formerly 32bit project of Windev won’t fix your issue. You need to start a new project, selecting 64bit right in the beginning. Tested on Windev 26. This IDE sucks, forced to use it because of working legacy code.)
answered Jul 21, 2022 at 23:23
PythoNicPythoNic
6661 gold badge5 silver badges15 bronze badges
2
Перейти к содержимому
Ситуация
При запуске программы через меню приложений возникает эта ошибка, программа не запускается.
Я встречал это на Oracle SQLDeveloper любой версии 20+, который устанавливался из официального rpm в среде Ubuntu + KDE с помощью sudo alien -dic
. Ошибки не было в MATE. Может не встречаться в GNOME. Встретил только в KDE.
Ошибки нет, если запустить программу напрямую из терминала.
Ошибки нет, если запустить desktop-файл через gio launch
.
Выдача прав a+x на desktop-файлы не помогает.
Запуск через kioclient5 exec
прерывается ошибкой:
Неизвестная ошибка 100
execvp: Ошибка формата выполняемого файла
Отправьте сообщение об ошибке на https://bugs.kde.org
Проблема
Команда в desktop-файле:
[Desktop Entry]
...
Exec=sqldeveloper
...
Проверяем в терминале:
$ which sqldeveloper
/usr/local/bin/sqldeveloper
$ file "$(which sqldeveloper)"
/usr/local/bin/sqldeveloper: ASCII text
$ head -2 "$(which sqldeveloper)"
/opt/sqldeveloper/sqldeveloper.sh
$ cat /opt/sqldeveloper/sqldeveloper.sh
#!/bin/bash
cd "`dirname $0`"/sqldeveloper/bin && bash sqldeveloper $*
Вывод простой: штатный desktop-файл ссылается на шелл-скрипт без шибенга, который запускает шелл-скрипт с шибенгом. Проблема именно в первом.
Решение
- Изменить параметр
Exec
в desktop-файле на корректный скрипт или бинарник. - Добавить шибенг в первый шелл-скрипт, тогда результат должен быть таким:
$ file "$(which sqldeveloper)"
/usr/local/bin/sqldeveloper: Bourne-Again shell script, ASCII text executable
Предполагаю, что аналогичное решение подойдёт для другого ПО. По крайней мере, стоит попробовать.
Содержание
- Решение проблемы с ошибкой «bash: не удаётся запустить бинарный файл: Ошибка формата выполняемого файла»
- О разрядности дистрибутивов Linux и о программ
- Запуск ARM файлов в Linux
- Заключение
- execvp: Ошибка формата выполняемого файла
- 🛠️ Исправление ошибки «Exec format» при запуске скриптов командой run-parts
- Решение ошибки «Exec format» при запуске скриптов командой run-parts
- Решение проблемы с ошибкой «bash: не удаётся запустить бинарный файл: Ошибка формата выполняемого файла»
- О разрядности дистрибутивов Linux и о программ
- Запуск ARM файлов в Linux
- Заключение
Решение проблемы с ошибкой «bash: не удаётся запустить бинарный файл: Ошибка формата выполняемого файла»
В операционной системе Linux при запуске скаченного файла, либо при запуске самостоятельно скомпилированного файла вы можете столкнуться с ошибкой:
Если у вас англоязычная локаль, то ошибка будет примерно такой:
Причинами данной ошибки могут быть:
Чтобы получить информацию о файле, который вы пытаетесь запустить, можно использовать утилиту file, после которой укажите путь до файла:
Здесь мы видим, что файл предназначен для 64-битной системы, об этом говорит запись 64-bit, для процессора с архитектурой x86-64.
Этот файл для 32-битных систем, для процессора с архитектурой ARM EABI4.
Если вы не знаете, какой битности ваша система, то выполните команду:
Для 64-битных систем будет выведено x86_64, а для 32-битных – x86.
О разрядности дистрибутивов Linux и о программ
На компьютер с 32-битным процессором вы можете установить только 32-битную операционную систему и в ней запускать только 32-битные программы.
На компьютер с 64-битным процессором вы можете установить как 64-битную ОС, так и 32-битный Linux. В случае, если вы установили 64-битный дистрибутив Linux, то в нём вы можете запускать и 64-битные программы и 32-битные. А если вы установили 32-битный дистрибутив, то в нём возможно запускать только 32-битные программы.
Итак, если у вас 32-битная система, а файл для 64-битной системы или даже для ARM архитектуры, то у вас следующие варианты:
Запуск ARM файлов в Linux
Часто можно запустить исполнимые образы ARM на amd64 системах если установить пакеты binfmt-support, qemu, и qemu-user-static:
Заключение
Итак, ошибка формата выполняемого файла с невозможностью запустить бинарный файл возникает из-за несоответствия программы операционной системе или архитектуре процессора. Эта проблема не должна возникать, если вы установили программу из исходных репозиториев (кроме случаев неправильной настройки источников репозитория). При возникновении этой проблемы поищите файл, подходящий для вашей архитектуры или скомпилируйте файл из исходных кодов под архитектуру вашей операционной системы.
Источник
execvp: Ошибка формата выполняемого файла
3) (Запускается только до перезагрузки ПК и только через root)
QStandardPaths: XDG_RUNTIME_DIR not set, defaulting to ‘/tmp/runtime-root’
void Autorization::listen() *2 62000
bool Setting::connectDatabase() QThread(0x5617d599a3a0)
void SqlWorker::connectToDatabase(QString) «/root/.joxi/setting»
После каждой перезагрузки ПК, Joxi перестаёт запускаться и заново надо его переустанавливать.
Скрипт joxi.sh выдаёт ошибку «execvp: Ошибка формата выполняемого файла«.
[sudo] пароль для alexandr:
Creating directory joxi
Verifying archive integrity. 100% MD5 checksums are OK. All good.
-rwx—— 1 alexandr alexandr 351 июн 5 22:32 install.sh
-rwx—— 1 alexandr alexandr 4305176 июн 5 22:32 joxi
-rwx—— 1 alexandr alexandr 86 июн 5 22:32 joxi.desktop
-rwx—— 1 alexandr alexandr 50 июн 5 22:32 joxi.sh
Available platform plugins are: eglfs, linuxfb, minimal, minimalegl, offscreen, vnc, wayland-egl, wayland, wayland-xcomposite-egl, wayland-xcomposite-glx, webgl, xcb.
Available platform plugins are: eglfs, linuxfb, minimal, minimalegl, offscreen, vnc, wayland-egl, wayland, wayland-xcomposite-egl, wayland-xcomposite-glx, webgl, xcb.
Operating System: KDE neon 5.18
KDE Plasma Version: 5.18.5
KDE Frameworks Version: 5.70.0
Qt Version: 5.14.2
Kernel Version: 5.3.0-53-generic
OS Type: 64-bit
Источник
🛠️ Исправление ошибки «Exec format» при запуске скриптов командой run-parts
Решение ошибки «Exec format» при запуске скриптов командой run-parts
Чтобы запустить все скрипты в папке «Documents», я запустил:
Я получил следующее сообщение об ошибке:
Bourne shell, или совместимый шеллl:
Bash:
Perl:
Python 2.x:
Python 3.x:
Это то, что мы называем шебанг.
Теперь вернемся к теме.
Отредактируйте ваши скрипты, используя ваш любимый редактор:
Добавьте шебанг в начале скрипта:
Теперь вы можете без проблем запускать скрипты с помощью команды run-parts, используя команду run-parts.
Вы также можете использовать утилиту ShellCheck для поиска проблем в своих скриптах оболочки.
Anything in here will be replaced on browsers that support the canvas element
Источник
Я пытаюсь запустить программу, но ошибка происходит так:
Результатом file program было:
Как я могу исправить эту ошибку?
Я использую Ubuntu 14.04.2 (amd64) с VMware. Я тоже пробовал с Ubuntu i386, но результат был таким же.
Вы пытаетесь запустить исполняемый файл, скомпилированный для архитектуры ARM на архитектуре x86-64, что очень похоже на запрос вашего процессора, который говорит только по-английски, указывать направление на китайском.
Если вам нужно запустить этот исполняемый файл, у вас есть два варианта:
Получить версию исполняемого файла x86-64 (любым способом; если вам не удается получить версию исполняемого файла x86-64, но вы можете получить его исходный код, вы можете попытаться перекомпилировать его на виртуальной машине );
Установите Ubuntu Server for ARM вместо Ubuntu 14.04.2 (amd64). Для этого требуется либо физическая машина, работающая на архитектуре ARM, либо программное обеспечение для виртуализации, которое может эмулировать ее.
Это также может произойти, если вы попытаетесь запустить исполняемый файл x86-64 на 32-разрядной платформе.
В одном конкретном случае я скачал код Visual Studio и попытался запустить его на своей установке Ubuntu, но я не понял, что я установил 32-битную Ubuntu в эту виртуальную машину. Я получил эту ошибку, но после загрузки 32-разрядной версии, он работал без проблем.
qemu затем выполнит эмуляцию syscall при запуске исполняемого файла. Это работает для большинства двоичных файлов ARM, но есть некоторые, которые могут работать неправильно.
Такая ошибка может возникнуть, если выполняются все следующие условия:
Если java в системе установлено более одного, это может произойти и не будет установлено по умолчанию. На Ubuntu14.04 LTS я мог решить ее, выполнив следующее и выбрав java нужное.
Это также может произойти, если двоичный файл использует реализацию libc, которая не является libc, например, musl. В эти дни эта конкретная проблема, скорее всего, встречается при попытке запуска двоичного файла с libc в контейнере Docker с изображением, основанным на alpine. Ничто не может быть сделано с самим двоичным файлом для поддержки обеих сред, потому что реализация libc всегда должна быть статически связана, то есть встроена непосредственно в двоичный файл, по причинам.
Источник
Решение проблемы с ошибкой «bash: не удаётся запустить бинарный файл: Ошибка формата выполняемого файла»
В операционной системе Linux при запуске скаченного файла, либо при запуске самостоятельно скомпилированного файла вы можете столкнуться с ошибкой:
Если у вас англоязычная локаль, то ошибка будет примерно такой:
Причинами данной ошибки могут быть:
Чтобы получить информацию о файле, который вы пытаетесь запустить, можно использовать утилиту file, после которой укажите путь до файла:
Здесь мы видим, что файл предназначен для 64-битной системы, об этом говорит запись 64-bit, для процессора с архитектурой x86-64.
Этот файл для 32-битных систем, для процессора с архитектурой ARM EABI4.
Если вы не знаете, какой битности ваша система, то выполните команду:
Для 64-битных систем будет выведено x86_64, а для 32-битных – x86.
О разрядности дистрибутивов Linux и о программ
На компьютер с 32-битным процессором вы можете установить только 32-битную операционную систему и в ней запускать только 32-битные программы.
На компьютер с 64-битным процессором вы можете установить как 64-битную ОС, так и 32-битный Linux. В случае, если вы установили 64-битный дистрибутив Linux, то в нём вы можете запускать и 64-битные программы и 32-битные. А если вы установили 32-битный дистрибутив, то в нём возможно запускать только 32-битные программы.
Итак, если у вас 32-битная система, а файл для 64-битной системы или даже для ARM архитектуры, то у вас следующие варианты:
Запуск ARM файлов в Linux
Часто можно запустить исполнимые образы ARM на amd64 системах если установить пакеты binfmt-support, qemu, и qemu-user-static:
Заключение
Итак, ошибка формата выполняемого файла с невозможностью запустить бинарный файл возникает из-за несоответствия программы операционной системе или архитектуре процессора. Эта проблема не должна возникать, если вы установили программу из исходных репозиториев (кроме случаев неправильной настройки источников репозитория). При возникновении этой проблемы поищите файл, подходящий для вашей архитектуры или скомпилируйте файл из исходных кодов под архитектуру вашей операционной системы.
Источник
You have a 64-bit x86 CPU (indicated by the lm
flag in /proc/cpuinfo
), but you’re running a 32-bit kernel. The program you’re trying to run requires a 64-bit runtime, so it won’t work as-is: even on a 64-bit CPU, a 32-bit kernel can’t run 64-bit programs.
If you can find a 32-bit build of the program (or build it yourself), use that.
Alternatively, you can install a 64-bit kernel, reboot, and then install the 64-bit libraries required by your program.
To install a 64-bit kernel, run
sudo dpkg --add-architecture amd64
sudo apt-get update
sudo apt-get install linux-image-generic:amd64
This will install the latest 64-bit Xenial kernel, along with various supporting 64-bit packages. Once you reboot, you should find that uname -a
shows x86_64
rather than i686
. If you attempt to run your program again, it might just work, or you’ll get an error because of missing libraries; in the latter case, install the corresponding packages (use apt-file
to find them) to get the program working.