Как исправить не удается выполнить двоичный файл: ошибка формата 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, которая встречается на некоторых рабочих станциях, а также на многих компьютерах Classic Macintosh и более старых машинах OS X Macintosh. На самом деле вы все еще можете найти репозитории Ubuntu для этих архитектур, хотя сегодня они получают небольшую поддержку. Однако в этом случае вы, скорее всего, не сможете запустить много бинарных файлов Linux, которые вы загружаете из Интернета, за пределами официальных репозиториев. Это не означает, что Ubuntu не работает на этих машинах, хотя вы, возможно, захотите взглянуть на более легкий дистрибутив Lubuntu.

Способ 2: с помощью команды файла

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

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

Лучший способ исправить это — установить соответствующий пакет для вашей архитектуры. Если вы устанавливаете пакеты из Ubuntu, то система apt-get или графический менеджер Synaptic помогут вам без проблем. Если вы загружаете пакеты из другого дистрибутива, вам нужно найти подходящий для вашей архитектуры. Взять, к примеру, список Arch Linux для пакета gvim. В то время как пакет по умолчанию имеет архитектуру 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-битных или 32-битных процессоров Intel.

Ссылка на основную публикацию
Adblock
detector