ARM 上で x86 実行ファイルを実行することは可能ですか?

ARM 上で x86 実行ファイルを実行することは可能ですか?

x86-64 バイナリである Navicat を aarch64 マシンにインストールしようとしていますが、「バイナリ ファイルを実行できません: 実行形式エラー」という結果になります。

file実行可能ファイルを実行した結果は次のとおりです。

navicatess15-sqlserver-en.AppImage: ELF 64-bit LSB executable, x86-64, version 1 (SYSV), dynamically linked, interpreter /lib64/ld-linux-x86-64.so.2, for GNU/Linux 2.6.18, BuildID[sha1]=d629f6099d2344ad82818172add1d38c5e11bc6d, stripped

そしてこれが私のuname -a:

Linux penguin 4.19.98-08076-g24ab33fb8e14 #1 SMP PREEMPT Wed Apr 1 17:17:36 PDT 2020 aarch64 GNU/Linux

この実行ファイルを自分のマシンで実行する方法はありますか?

(何か違いがあるかは分かりませんが、私は OP1 プロセッサを搭載した Samsung Chromebook Plus で Linux を実行しています)

答え1

各アーキテクチャは独自のハードウェア言語を話すので、当然ARM CPUはARMバイナリをネイティブにしか実行できません。別のアーキテクチャのバイナリを実行したい場合は、エミュレータ最も有名なx86-64エミュレータはケムそしてボッホ

しかし、エミュレーションは非常に遅いため、時間に敏感なアプリケーションには適しておらず、最後の手段となるでしょう。可能であればソースから再コンパイルするか、ARMの代替ソフトウェアを見つける方がよいでしょう。

答え2

Debianはマルチアーキテクチャサポートつまり、あるアーキテクチャ用に構築されたプログラムを他のアーキテクチャにインストールして実行できるということです。

しかし以下の点を考慮する必要があります。

  1. x86 アーキテクチャは ARM とは大きく異なるため、これはエミュレーション (通常は 経由qemu-user) を通じて実行されるため、速度と機能が多少低下する可能性があります。

  2. これにはサポートが必要ですbinfmt。Chromebookで「Linuxコンテナ」(crostinit)を使用している場合は、この郵便受け、このサポートは有効になっていません。

  3. Chromebook では、この時点でbinfmtサポートが必要です。croutonそれは動作しますその文脈では期待通りの結果です。

これをテストしたい場合は、以下を実行してください。

a. アーキテクチャをサポートするために必要なバイナリをインストールします。

sudo apt-get install binfmt-support qemu-user-static
sudo update-binfmts --display

b. マルチアーキテクチャをサポートするように Debian をセットアップします。

sudo dpkg --add-architecture amd64
sudo apt-get update
sudo apt-get upgrade

c. テストしてみましょう。(すでにhelloアーキテクチャ用のパッケージをインストールしてくださいaarch64

sudo apt-get install hello:amd64
hello

これにより、バイナリを使用して、おなじみの「Hello, World!」メッセージが印刷されますamd64

答え3

aarch64の場合、次のようなプロジェクトフェックスまたはボックス64QEMU ユーザー エミュレーションよりもパフォーマンスが優れています。動的再コンパイルを使用し、通常、Win32 x86/x86_64 ソフトウェアに WINE サポートも提供します。

関連情報