如何解决:-bash::无法执行二进制文件

use*_*868 22 bash binary-files macos

我有一个名为 b1 的文件,其中包含汇编语言。我正在尝试使用在 OSX 上执行文件

$ ./b1
Run Code Online (Sandbox Code Playgroud)

我收到以下错误:

-bash: ./b1: cannot execute binary file
Run Code Online (Sandbox Code Playgroud)

我看过其他类似的问题,但无济于事。我肯定在使用 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
Run Code Online (Sandbox Code Playgroud)

编辑:

Ranas 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

Win*_*nny 29

抱歉,此文件适用于 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 版本。

那么...为什么不能b1XYZ操作系统或 CPU 上工作?

正如人们说不同的语言一样,不同的计算机理解不同的指令。例如,您的 Mac 使用 Intel 处理器,而您的 Android 手机使用 ARM 处理器。将这两种处理器与英语和法语进行比较。他们可能属于同一个语系,但仍然不能同时说这两种语言。由此得出一个结论:

不同的计算机用不同的语言“交谈”。

至于为什么不同的操作系统(如 Windows、Mac OS X 和 Linux)不能使用相同的二进制文件,请考虑:

是什么让软件在客观上不同于硬件?不多。

两者都提供了一种系统和一种“语言”,允许计算机的更复杂组件为最终用户完成任务。两者都需要一种商定的语言来完成工作。想象一下,如果有 10 个人在进行一场大喊大叫,每个人都说一种不同的语言。这就是为什么不同的操作系统软件需要不同的二进制文件,即使两个操作系统使用相同的处理器。