Execvp ошибка формата выполняемого файла

Перейти к содержимому

Ситуация

При запуске программы через меню приложений возникает эта ошибка, программа не запускается.

Я встречал это на 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-файл ссылается на шелл-скрипт без шибенга, который запускает шелл-скрипт с шибенгом. Проблема именно в первом.

Решение

  1. Изменить параметр Exec в desktop-файле на корректный скрипт или бинарник.
  2. Добавить шибенг в первый шелл-скрипт, тогда результат должен быть таким:
$ file "$(which sqldeveloper)"
/usr/local/bin/sqldeveloper: Bourne-Again shell script, ASCII text executable

Предполагаю, что аналогичное решение подойдёт для другого ПО. По крайней мере, стоит попробовать.

Содержание

  1. Решение проблемы с ошибкой «bash: не удаётся запустить бинарный файл: Ошибка формата выполняемого файла»
  2. О разрядности дистрибутивов Linux и о программ
  3. Запуск ARM файлов в Linux
  4. Заключение
  5. execvp: Ошибка формата выполняемого файла
  6. 🛠️ Исправление ошибки «Exec format» при запуске скриптов командой run-parts
  7. Решение ошибки «Exec format» при запуске скриптов командой run-parts
  8. Решение проблемы с ошибкой «bash: не удаётся запустить бинарный файл: Ошибка формата выполняемого файла»
  9. О разрядности дистрибутивов Linux и о программ
  10. Запуск ARM файлов в Linux
  11. Заключение

Решение проблемы с ошибкой «bash: не удаётся запустить бинарный файл: Ошибка формата выполняемого файла»

В операционной системе Linux при запуске скаченного файла, либо при запуске самостоятельно скомпилированного файла вы можете столкнуться с ошибкой:

pic1 1

Если у вас англоязычная локаль, то ошибка будет примерно такой:

Причинами данной ошибки могут быть:

Чтобы получить информацию о файле, который вы пытаетесь запустить, можно использовать утилиту 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: Ошибка формата выполняемого файла

6bd5d3aff40a91572e2a4c288d18bc68

5917708e051733485f8457dac11fbc5b

074fb2e9776312436cca9ba3c90be35e

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 для поиска проблем в своих скриптах оболочки.

itsec

Telegram 1 1

vkcuttingswordpress

facebooktwitterredditpinterestlinkedinmail

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 при запуске скаченного файла, либо при запуске самостоятельно скомпилированного файла вы можете столкнуться с ошибкой:

pic1 1

Если у вас англоязычная локаль, то ошибка будет примерно такой:

Причинами данной ошибки могут быть:

Чтобы получить информацию о файле, который вы пытаетесь запустить, можно использовать утилиту 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:

Заключение

Итак, ошибка формата выполняемого файла с невозможностью запустить бинарный файл возникает из-за несоответствия программы операционной системе или архитектуре процессора. Эта проблема не должна возникать, если вы установили программу из исходных репозиториев (кроме случаев неправильной настройки источников репозитория). При возникновении этой проблемы поищите файл, подходящий для вашей архитектуры или скомпилируйте файл из исходных кодов под архитектуру вашей операционной системы.

Источник

Пытаюсь редактировать js файлы, но они редактируются.

Как хорошо вышло, все разрешилось само собой

anonymous

(09.06.21 13:59:42 MSK)

  • Ссылка

ПКМ — открыть с помощью.

А вообще, вам надо убрать права на выполнение файла.

  • Ссылка

Правой кнопкой мышки «открыть с помощью» там выбрать редактор и задать его по умолчанию. Такде в свойствах файла (по тойже кнопки мышки уьрать исполнение) или проще в терминале написать chmod -x ./my_js_file.js -x запретить исполнять файл +x разрешить исполнять файл. Если у тебя их там много то в терминале chmod -x ./*.js тоесть выбрать все файлы с расширением js в текущем каталоге.

anonymous

(09.06.21 16:22:43 MSK)

  • Показать ответ
  • Ссылка

Ответ на:

комментарий
от anonymous 09.06.21 16:22:43 MSK

Открыть с помощью (выбор редактора) — конечно работает. Но это дополнительное действие мышкой. А мне нужно по Энтер.

В свойствах файла снимаю галку «Разрешить исполнять, как программу» — увы не работает. И при следующем заходе в свойства файла галка не снята.

Мне нужно не для конкретного файла, или директории, а для системы вообще. Естественно чтоб на систему отрицательно не влияло.

  • Показать ответы
  • Ссылка

Ответ на:

комментарий
от VasyOK_ZP 09.06.21 16:36:31 MSK

Не знаю как в кедах, везде можно выбрать по умолчанию программу лишь раз вызывав меню по правой кнопке.

anonymous

(09.06.21 16:39:12 MSK)

  • Ссылка

Ответ на:

комментарий
от VasyOK_ZP 09.06.21 16:36:31 MSK

Там же в свойствах файла, есть раздел, в котором можно сменить программу по умолчанию, в которой этот тип файла и открывается.

anonymous

(09.06.21 16:55:44 MSK)

  • Показать ответ
  • Ссылка

Ответ на:

комментарий
от anonymous 09.06.21 16:55:44 MSK

Ситуация проясняется.
Если на файл нажимаю в Dolphin — файл открывается в редакторе.
А в «сторонних» файловых менеджерах такая вот трабла.

В Double Commander пишет:
Error — KIO Client Unknown error code 100 execvp: Ошибка выполняемого файла

В Krusader пишет:
execvp: Ошибка формата выполняемого файла. — ОК
Could not start ‘путь к js файлу’.

Что делать? Страдать?

  • Показать ответ
  • Ссылка

Ответ на:

комментарий
от VasyOK_ZP 09.06.21 17:16:39 MSK

настраивай каждый файлменеджер…

скажи мне лучше зачем у тебя *.js имеют права на запуск? мне действительно интересно.

anonymous

(09.06.21 17:21:30 MSK)

  • Показать ответ
  • Ссылка

Ответ на:

комментарий
от anonymous 09.06.21 17:21:30 MSK

Ответ на:

комментарий
от VasyOK_ZP 09.06.21 17:53:26 MSK

как ты его создаёшь? и в файловом менеджере: ПКМ на *.js «Свойства» -> «Права» что?

anonymous

(09.06.21 18:15:28 MSK)

  • Ссылка

Ответ на:

комментарий
от VasyOK_ZP 09.06.21 17:53:26 MSK

Где создаёте? В Double Commander? Возможно он автоматический добавляет влаг исполнения у таких файлов.

tyamur ★★

(09.06.21 21:52:00 MSK)

  • Показать ответ
  • Ссылка

Ответ на:

комментарий
от tyamur 09.06.21 21:52:00 MSK

Ответ на:

комментарий
от VasyOK_ZP 10.06.21 00:12:01 MSK

Ответ на:

комментарий
от thunar 10.06.21 01:16:41 MSK

thunar, да, вы правы.

Когда сохраняю js файл в домашний каталог — при его запуске открывается редактор.
А когда этот же файл копирую на ntfs раздел, происходит такая
трабла.

И что делать?

  • Показать ответы
  • Ссылка

Ответ на:

комментарий
от VasyOK_ZP 10.06.21 13:10:29 MSK

А когда этот же файл копирую на ntfs раздел, происходит такая трабла.

И что делать?

Не копировать на ntfs раздел.

  • Ссылка

Ответ на:

комментарий
от VasyOK_ZP 10.06.21 13:10:29 MSK

раздел подмонтирован через fstab с флагом file_mode=0777?

почитать про этот флаг, как минимум при копировании с этого раздела к себе может помочь

man-from-36

(10.06.21 13:36:02 MSK)



Последнее исправление: man-from-36 10.06.21 13:37:15 MSK
(всего

исправлений: 1)

  • Показать ответ
  • Ссылка

Ответ на:

комментарий
от man-from-36 10.06.21 13:36:02 MSK

Я ничего не делал специально для монтирования. Просто на один SSD поставил Линукс, на других есть файлы с которыми я долго жил на Винде. Перестать пользоваться Виндовс пока не могу.

Как примонтировать раздел правильно?

  • Ссылка

Единственный вариант насколько я знаю — монтировать вручную, не через kio. Иначе вот такое вот гавно периодически будет всплывать. Именно вот по этой причине — сбежал с КДЕ.

Если вдруг есть другое решение — буду рад услышать.

  • Показать ответ
  • Ссылка

Ответ на:

комментарий
от Kazun3500 10.06.21 14:08:34 MSK

Содержание

  1. Как я могу устранить ошибку «не удается выполнить двоичный файл»?
  2. 7 ответов 7
  3. execvp: Ошибка формата выполняемого файла
  4. bash: ./program: невозможно выполнить двоичный файл: ошибка формата Exec
  5. 6 ответов
  6. bash: ./program: невозможно выполнить двоичный файл: ошибка формата Exec
  7. Решение проблемы с ошибкой «bash: не удаётся запустить бинарный файл: Ошибка формата выполняемого файла»
  8. О разрядности дистрибутивов Linux и о программ
  9. Запуск ARM файлов в Linux
  10. Заключение

Как я могу устранить ошибку «не удается выполнить двоичный файл»?

Когда я захожу через SSH, я вижу только это .

Я ничего не мог сделать здесь. Такие команды, как halt , poweroff , reboot , вернут command not found .

Как я могу это исправить? Я использую Debian Squeeze Linux

7 ответов 7

Обычно это сообщение об ошибке означает, что Linux не распознает файл как сценарий оболочки или как исполняемый файл.

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

Возможно, файл /usr/bin/id перезаписан?

Попробуйте запустить его, используя ./executablefilename вместо использования sh executetablefilename. В конце концов, это не скрипт оболочки.

Проблема заключается в запуске двоичного файла для другой архитектуры процессора. Вы можете использовать objdump (из binutils) для проверки архитектуры двоичных файлов. Вы можете использовать uname для проверки архитектуры машины.

Например, я столкнулся с этой ошибкой «невозможно выполнить двоичный файл» при установке FF.Communicator — плагина Firefox для Chrome (поэтому я могу запускать страницы, которые используют Java-апплеты).

    objdump показывает, что двоичный файл является 64-битным elf64-x86-64

uname показывает, что моя машина 32-битная i686

$./FF.Communicator bash:./FF.Communicator: невозможно выполнить двоичный файл $ uname -mpio i686 i686 i386 GNU/Linux $ objdump -a./FF.Communicator./FF.Communicator: формат файла elf64-x86-64./FF.Communicator

objdump на работающем бинарнике на моей машине показывает, что это 32-битный elf32-i386

$ objdump -a /bin /ls /bin /ls: формат файла elf32-i386

Используя эти инструменты, вы можете проверять архитектуры машин и двоичных файлов — не только архитектуры Intel, но и любого процессора.

Для пользователей Mac OSX вы можете узнать информацию об архитектуре определенного файла, используя команду «file»:

Источник

execvp: Ошибка формата выполняемого файла

1) sudo chmod +x ./joxi.run
2) ./joxi.run

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 chmod +x ./joxi.run

[sudo] пароль для alexandr:

/Загрузки$ sudo su

Creating directory joxi

Verifying archive integrity. 100% MD5 checksums are OK. All good.

Uncompressing Joxi — best screenshot capture 100%

-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

/joxi$ ./joxi
qt.qpa.plugin: Could not load the Qt platform plugin «xcb» in «» even though it was found.
This application failed to start because no Qt platform plugin could be initialized. Reinstalling the application may fix this problem.

Available platform plugins are: eglfs, linuxfb, minimal, minimalegl, offscreen, vnc, wayland-egl, wayland, wayland-xcomposite-egl, wayland-xcomposite-glx, webgl, xcb.

/joxi$ sudo ./joxi
[sudo] пароль для alexandr:
qt.qpa.plugin: Could not load the Qt platform plugin «xcb» in «» even though it was found.
This application failed to start because no Qt platform plugin could be initialized. Reinstalling the application may fix this problem.

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

Источник

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

Я пытаюсь запустить программу, но ошибка происходит следующим образом:

Результатом программы file program был:

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

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

6 ответов

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

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

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

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

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

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

Часто можно запустить исполняемый образ ARM в системе amd64, если вы установите binfmt-support , qemu и qemu-user-static пакеты:

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

Такая ошибка может возникнуть, если выполняются все следующие условия:

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

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

Если в системе установлено более одного java , это может произойти и не будет установлено как значение по умолчанию. В Ubuntu14.04 LTS я мог бы решить эту проблему, выполнив следующие и выбрав java , который мне нужен.

Я выбираю 2 и устанавливаю openjdk-8 по умолчанию. Который не отображал ошибку Exec format error .

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

Источник

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

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

Результатом 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-разрядной версии, он работал без проблем.

Часто можно запустить исполняемый образ ARM в системе amd64, если вы установите пакеты binfmt-support , qemu и qemu-user-static :

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

Такая ошибка может возникнуть, если выполняются все следующие условия:

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

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

Вы должны скомпилировать свой файл, используя соответствующую архитектуру ЦП (например, x86), и скопировать файл .exe на свой компьютер с Linux. Затем вы можете установить mono на вашем Linux-компьютере и выполнить следующую команду:

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

Я выбираю 2 и устанавливаю openjdk-8 по умолчанию. Который не показал Exec format error .

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

Источник

Решение проблемы с ошибкой «bash: не удаётся запустить бинарный файл: Ошибка формата выполняемого файла»

В операционной системе Linux при запуске скаченного файла, либо при запуске самостоятельно скомпилированного файла вы можете столкнуться с ошибкой:

Если у вас англоязычная локаль, то ошибка будет примерно такой:

В самой ошибке вместо /путь/до/файла и ./program будет указан путь до файла программы, который вы хотите запустить.

Причинами данной ошибки могут быть:

    • попытка запустить 64-битный файл на 32-битной системе
    • файл скомпилирован для другой архитектуры (например, для ARM, а вы пытаетесь запустить его на ПК)
    • вы пытаетесь выполнить не исполнимый файл, а ссылку

Чтобы получить информацию о файле, который вы пытаетесь запустить, можно использовать утилиту 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:

Заключение

Итак, ошибка формата выполняемого файла с невозможностью запустить бинарный файл возникает из-за несоответствия программы операционной системе или архитектуре процессора. Эта проблема не должна возникать, если вы установили программу из исходных репозиториев (кроме случаев неправильной настройки источников репозитория). При возникновении этой проблемы поищите файл, подходящий для вашей архитектуры или скомпилируйте файл из исходных кодов под архитектуру вашей операционной системы.

Источник

У нас есть две системы RHEL 6, в которых работают идентичные версии ядра и glibc (glibc – 2.12–1.90.el6_3.6). Согласно стандарту POSIX и справочным страницам Linux, если ядро определяет, что исполняемый файл не в исполняемом формате, таком как ELF, и у него нет шебанга (#!) line, функции execl , execlp , execle , execv , execvp и execvpe (но не execve) будут пытаться выполнить этот файл с помощью оболочки POSIX, которая в Linux называется /bin/sh .

Однако в одной из систем выполнение сценария оболочки, первая строка которого : использование функции execvp завершается ошибкой, в то время как на другой машине сценарий выполняется с использованием /bin/sh , как и ожидалось. В частности, мы используем эти тестовые программы; /tmp/test_script сделан исполняемым:

хс:

#include <stdio.h>
#include <unistd.h>
#include <stdlib.h>

extern char **environ;

int main () {
        char *argv[]   = { "/tmp/test_script", NULL };
        char *progname = argv[0];
        if (execvp(progname, argv) == -1) {
                perror("execvp");
                return -1;
        }
}

/ TMP / test_script:

:

echo "Test script called"
exit 0

Мы искали в исходной RPM установленную версию glibc, и она определенно реализует желаемое поведение (execvp — тривиальная оболочка вокруг execvpe):

POSIX /execvpe.c:

if (strchr(file, '/') != NULL)
    {
        /* Don't search when it contains a slash.  */
        __execve(file, argv, envp);

        if (errno == ENOEXEC)
            {
                /* Count the arguments.  */
                int argc = 0;
                while (argv[argc++])
                    ;
                size_t len = (argc + 1) * sizeof(char *);
                char **script_argv;
                void *ptr = NULL;
                if (__libc_use_alloca(len))
                    script_argv = alloca(len);
                else
                    script_argv = ptr = malloc(len);

                if (script_argv != NULL)
                    {
                        scripts_argv(file, argv, argc, script_argv);
                        __execve(script_argv[0], script_argv, envp);

                        free(ptr);
                    }
            }
    }
else
   ︙

Здесь scripts_argv — это простая функция, которая добавляет /bin/sh в список аргументов, а __execve идентична execve , доступному для пространства пользователя через glibc.

Кто-нибудь еще сталкивался с этой проблемой в Linux? Поведение корректно в любой другой системе, на которой я его пробовал.

Понравилась статья? Поделить с друзьями:
  • Execute immediate create table as select oracle ошибка
  • Exe вызвало ошибку и будет
  • Exe файлы запускаются с ошибкой
  • Exe произошла ошибка приложение будет закрыто
  • Exe win32 что это ошибка