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



Попробуйте наш инструмент устранения неполадок

Хотя этого не должно происходить при использовании официальных репозиториев apt-get, но если вы загрузите программное обеспечение из Интернета и запустите его, есть шанс, что вы увидите ужасный bash: ./nameOfProgram: невозможно выполнить двоичный файл: ошибка формата Exec . Эта ошибка, за которой обычно следует bash: ./nameOfProgram.sh: В доступе отказано или что-то в этом роде, указывает на то, что Ubuntu не смогла правильно взаимодействовать с загруженным вами двоичным файлом. Это связано с тем, что, хотя это, по всей видимости, действительный двоичный файл Linux, он разработан для другого набора микросхем, чем в настоящее время поддерживает ваше ядро.



Большинство людей, использующих Ubuntu, используют 32-битные или 64-битные процессоры, основанные на стандартной архитектуре, выпущенной Intel, независимо от того, кто на самом деле создал их микрочипы. Важно помнить, что 64-битные процессоры могут работать в 32-битном режиме, поэтому, если вы получаете эту ошибку, даже если у вас 64-битный процессор, есть вероятность, что вы используете 32-битную версию Ubuntu. Достаточно нескольких простых команд, чтобы определить, как работает ваш чип.



Метод 1: использование команды arch

Если вы не знакомы с типом микропроцессора, который вы установили на свой компьютер, то сначала вы захотите использовать команду arch из командной строки. После выполнения этой команды вы увидите только одну строку вывода. Во многих случаях вы увидите i686, что означает, что вы используете 32-разрядный процессор и, следовательно, не можете запускать двоичные файлы x86_64. Если вместо этого вы видите amd64 или что-то подобное, значит, вы используете процессор x86_64 и, по крайней мере, теоретически должны иметь возможность запускать большинство 32-битных и 64-битных двоичных файлов. В отличие от Microsoft Windows, Ubuntu Linux на самом деле содержит необходимые инструменты, позволяющие пользователям 644-битных наборов микросхем также во многих случаях запускать 16-битные программы Windows в своей операционной системе.



Эти условия все еще верны, даже если вы на самом деле не используете эту конкретную модель микрочипа. Например, i686 - это то, как Linux относится ко многим 32-битным процессорам, даже если они на самом деле не являются чипами Intel 80686. Даже если вы используете 64-битную технологию Intel, Arch может называть ваш процессор микросхемой amd64. Это не означает ошибку, и ее можно проигнорировать. Вы можете использовать кошку / proc / cpuinfo или больше / proc / cpuinfo чтобы узнать, какой именно процессор вы используете. Поскольку строки в этом файле длинные, возможно, вы захотите нажать F11 перед его вводом, если вы используете графическое окно терминала. Пользователям виртуальной консоли, особенно тем, кто работает с сервером Ubuntu, не о чем беспокоиться.

Вы можете увидеть некоторые другие типы вывода, которые могут еще больше ограничить ваши возможности, когда дело доходит до запуска программного обеспечения. Ubuntu дольше всего поддерживала архитектуру PowerPC, которая встречается на некоторых рабочих станциях, а также на многих классических компьютерах Macintosh и старых компьютерах Macintosh с OS X. На самом деле вы все еще можете найти репозитории Ubuntu для этих архитектур, хотя сегодня они получают небольшую поддержку. Однако в этом случае вы, скорее всего, не сможете запускать многие двоичные файлы Linux, загруженные из Интернета, за пределами официальных репозиториев. Это не означает, что Ubuntu не работает на этих машинах, хотя вы можете взглянуть на более легкий дистрибутив Lubuntu.

Метод 2: использование файловой команды

Команда file определяет, что содержат разные файлы, и обычно очень точна. Попробуйте определить нужный файл, набрав файл nameOfProgram чтобы увидеть, получаете ли вы на выходе 32-разрядную версию ELF или 64-разрядную версию ELF. Если он сообщает вам, что это 64-битный двоичный файл ELF, и вы получили i686 в качестве выходных данных команды arch, тогда вы не сможете запустить его на своем компьютере. Если вы используете 64-битный микропроцессор под управлением 32-битной Ubuntu, вы можете технически переустановить операционную систему, хотя это немного крайний шаг для запуска одной программы.



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

Лучший способ исправить это - установить пакет, соответствующий вашей архитектуре. Если вы устанавливаете пакеты изнутри Ubuntu, то система apt-get или графический менеджер Synaptic помогут вам без проблем. Если вы загружаете пакеты из другого дистрибутива, вам нужно будет найти тот, который подходит для вашей архитектуры. Возьмем, к примеру, список пакета gvim в Arch Linux. Хотя пакет по умолчанию имеет архитектуру x86_64, есть также пакет для набора микросхем i686. Этот будет работать на 32-битных машинах, которые работают со структурой прерываний Intel, но помните, что термины i686 и 32-бит не являются взаимоисключающими постоянно, поскольку другие чипсеты, поддерживаемые Linux, действительно имеют свои собственные 32-битные реализации.

Пользователи, изучающие всю среду GNU / Linux, могут встретить двоичные файлы, скомпилированные для гораздо более экзотических технологий, чем эти. Linux действительно представляет собой кроссплатформенную кодовую сцену, поэтому вы увидите, что для работы скомпилированы OpenRISC, MIPS, SPARC, M32R, MN103, ARM, ARC, Alpha и многие другие стандартные двоичные файлы. Скорее всего, вы не сможете запустить ни один из них, хотя ARM - чрезвычайно популярная платформа для планшетов и смартфонов. Это также платформа, на которой основан Raspberry Pi, что означает, что если вы действительно используете Ubuntu на мобильном устройстве или дистрибутив Ubuntu MATE для Raspberry Pi, они вам действительно понадобятся вместо 32-битных файлов Intel или x86_64 двоичных файлов.

4 минуты на чтение