アセンブリ言語を含む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 用です。その理由は次のとおりです。
- ファイル
b1
はELF
(拡張可能かつリンク可能な形式)形式ですが、Mac OS X ではMach-O
バイナリ形式が使用されます。 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