Извините, этот файл для GNU/Linux

Извините, этот файл для GNU/Linux

У меня есть файл с именем b1, который содержит язык ассемблера. Я пытаюсь выполнить файл на OSX с помощью

$ ./b1

Я получаю следующую ошибку:

-bash: ./b1: cannot execute binary file

Я посмотрел другие похожие вопросы, но безрезультатно. Я определенно использую 64-битную архитектуру.

Вот вывод соответствующей информации:

$ file b1
b1: ELF 32-bit LSB executable, Intel 80386, version 1 (SYSV), dynamically linked (uses shared libs), for GNU/Linux 2.6.18, not stripped
$ uname -a
Darwin Anthonys-MacBook-Pro.local 13.0.0 Darwin Kernel Version 13.0.0: Thu Sep 19 22:22:27 PDT 2013; root:xnu-2422.1.72~6/RELEASE_X86_64 x86_64

Редактировать:

Запустился as b1, который в итоге завершился с: /Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin/as: fatal error in /Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin/../libexec/as/x86_64/as

решение1

Извините, этот файл для GNU/Linux

Согласно вашим fileданным, эта программа для GNU/Linux. Я знаю это, потому что:

  1. Файл b1находится вELF(Расширяемый и связываемый формат)формат, тогда как Mac OS X использует Mach-Oформат для двоичных файлов;
  2. fileраспознает, что этот файл предназначен для GNU/Linux 2.6.18, а значит, он будет работать в большинстве современных дистрибутивов Linux.

Чтобы решить вашу проблему, вам необходимо либо запустить ее в дистрибутиве Linux, либо перекомпилировать программу, либо получить версию этой программы для Mac OS X.

Итак... Почему не b1работаетXYZОперационная система или процессор?

Так же, как люди говорят на разных языках, разные компьютеры понимают разные инструкции. Например, ваш Mac использует процессор Intel, а ваш телефон Android использует процессор ARM. Сравните эти два процессора с английским и французским языками. Они могут принадлежать к одной языковой семье, но вы все равно не можете говорить на обоих языках одновременно. Это приводит к выводу:

Разные компьютеры «разговаривают» на разных языках.

Что касается того, почему разные операционные системы (такие как Windows, Mac OS X и Linux) не могут использовать одни и те же двоичные файлы, подумайте вот о чем:

Чем программное обеспечение объективно отличается от оборудования? Не так уж и много.

Оба предоставляют систему и «язык», которые позволяют более сложным компонентам компьютера выполнять задачи для конечного пользователя. Оба требуют согласованного языка для выполнения работы. Представьте, что было бы 10 человек, которые кричат ​​друг другу, и каждый говорит на своем языке. Вот почему разное программное обеспечение ОС нуждается в разных двоичных файлах, даже если обе операционные системы используют один и тот же процессор.

решение2

Язык ассемблера? Его нужно скомпилировать, точнее ассемблировать.

man as

Связанный контент