M1 Mac(arm64)でコンパイルされたバイナリがEC2 t4g.microインスタンス(aarch64)で実行されないのはなぜですか?

M1 Mac(arm64)でコンパイルされたバイナリがEC2 t4g.microインスタンス(aarch64)で実行されないのはなぜですか?

走るアルゴン2Debian を実行している AWS t4g.micro インスタンスの M1 Mac でコンパイルすると、次のエラーが発生します。

~によるとhttps://stackoverflow.com/a/47274698/4579271、同じスキーマを参照しますarm64aarch64

$ ./argon2 -h
-bash: ./argon2: cannot execute binary file: Exec format error

ベストアンサー1

単に同じハードウェアアーキテクチャのバイナリを持つだけでは十分ではなく、適切なソフトウェアプラットフォームをターゲットにする必要があります。 M1でmacOS用にビルドされたバイナリはDebianでは実行されず、M1でも実行されません(他のARM64 CPUはもちろん)。

あなたが経験している特定のエラーはバイナリですMach-O バイナリ; LinuxシステムにはELFバイナリが必要です。 Linux用のMach-Oローダーがあります(参照:armv7lでバイナリタイプMach-Oを実行する方法は?)しかし、特定のバイナリを実行できるかどうかはわかりません。

(バイナリロードは最初のステップにすぎません。サポートライブラリも必要ですが、システムコールのエミュレーションも必要です。馬ローダーCライブラリを使用してmacOSプログラムをホストのデフォルトCライブラリにバインドし、一部の変換を行うことで後者を避けます。これは、システムコール自体を実行しないすべてのプログラムで機能します。 )

おすすめ記事