申し訳ありませんが、このファイルは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. ファイルb1ELF(拡張可能かつリンク可能な形式)形式ですが、Mac OS X ではMach-Oバイナリ形式が使用されます。
  2. fileこのファイルは 用であると認識されるGNU/Linux 2.6.18ため、ほとんどの最新の Linux ディストリビューションで動作します。

問題を解決するには、この問題を Linux ディストリビューション内で実行するか、プログラムを再コンパイルするか、このプログラムの Mac OS X バージョンを入手する必要があります。

それで...なぜb1機能しないのかXYZOS か CPU か?

人々が異なる言語を話すのと同じように、異なるコンピューターは異なる命令を理解します。たとえば、Mac は Intel プロセッサを使用していますが、Android フォンは ARM プロセッサを使用しています。これら 2 つのプロセッサを英語とフランス語と比較してください。これらは同じ言語ファミリーに属しているかもしれませんが、それでも同時に両方を話すことはできません。これは次の結論につながります。

異なるコンピューターは異なる言語で「話します」。

異なるオペレーティング システム (Windows、Mac OS X、Linux など) が同じバイナリを使用できない理由については、次の点を考慮してください。

ソフトウェアとハ​​ードウェアを客観的に区別するものは何でしょうか? それほど大きな違いはありません。

どちらも、エンド ユーザーに代わってコンピューターのより複雑なコンポーネントがタスクを完了できるようにするシステムと「言語」を提供します。どちらも、作業を完了するために合意された言語を必要とします。10 人の人々が怒鳴り合いをしていて、それぞれが異なる言語を話していると想像してください。これが、両方のオペレーティング システムが同じプロセッサを使用している場合でも、異なる OS ソフトウェアには異なるバイナリが必要な理由です。

答え2

アセンブリ言語ですか? コンパイル、つまりアセンブルする必要があります。

man as

関連情報