Rasbianでx86エミュレート

Rasbianでx86エミュレート

Rasbianを実行しているRaspberry PiでStarboundサーバーを実行したいです。
サーバーはx86アーキテクチャで実行するように構築されているので、私の目標はx86アーキテクチャをエミュレートしてサーバーを実行することです。

編集:box86は64ビットx86バイナリを実行しません。

そのためにボックス86
x86プログラムを実行できます(steamcmdはサーバーをダウンロードできるプログラムです)。ただし、サーバーを実行すると

bash: ./program: cannot execute binary file: Exec format error

box86がx86プログラムに会ったらエミュレートする必要があるため、これは奇妙です。

Qemuを使用してサーバーをシミュレートしようとしています。

sudo apt install qemu-user qemu-system qemu
sudo qemu-x86_64 starbound_server

~につながる

/lib64/ld-linux-x86-64.so.2: No such file or directory

一部の動的ライブラリが欠落しているようです。私はこのライブラリがqemuに付属すると思ったので、パラメータを使用して別のldファイルを指定してみ
ました。-Lところで、プログラムは/lib64フォルダだけを見ているようです。
私の最後の試みは、x86システムのlibファイルを使ってこのフォルダを作成することでした。ただし、これは次のような結果につながります。

ERROR: ld.so: object '/usr/lib/arm-linux-gnueabihf/libarmmem-${PLATFORM}.so' from /etc/ld.so.preload cannot be preloaded (cannot open shared object file): ignored.

この問題を解決するために、人々は/etc/ld.so.preloadへの参照を削除するように変更を提案しましたが、libarmmemファイルはRasbianシステムには存在しません。

x86プログラムをエミュレートするより良い方法があるかどうか疑問に思います。
そうでない場合は、/lib64フォルダを埋めるのに適したライブラリをどこで見つけることができますか?

readelfから得られた情報は次のとおりです。

machine: Advanced Micro Devices X86-64
type: EXEC
class: ELF64

共有ライブラリ

[libpthread.so.0]
[libdl.so.2]
librt.so.1]
[libm.so.6]
[libc.so.6]
[ld-linux-x86-64.so.2]

答え1

コメントいただいたStephen Kittに感謝します。

使用chrootこのチュートリアル問題を解決しました。

64ビットDebianを使用してディレクトリを作成します。

apt install binutils debootstrap
mkdir my-directory
debootstrap --arch amd64 stretch my-directory http://deb.debian.org/debian

qemu次に環境にインストールします。

chroot my-directory
apt install qemu qemu-system

その後、いつでもプログラムを実行します。

chroot my-directory
qemu-x86_64 my_x86_programm

答え2

QEMU 5.2を使用してこの問題が発生し、chrootなしで動作するソリューションが必要でした。 /some_pathにx86_64ライブラリ(libc、ld-linux-x86_64.so.2など)をインストールすると、次のことができることがわかりました。

ln -s . /some_path/lib64

その後、次のものを使用できます。

qemu-static-x86_64 -L /some_path <command to run>

また、以下を設定する必要がありました。

LD_LIBRARY_PATH=/some_path

しかし、これは私の特定の環境によるものかもしれません。

また、qemu-userを使用できないCentos7を使用しているため(aarch64の場合)、debian qemu-user-static .debを次から取得できました。https://packages.debian.org/sid/main/qemu-user-staticそして使用

ar x <deb file>
tar -xf data.tar.xz

その後、生成されたqemu-static *バイナリは静的にリンクされています。もちろん、x86_64ライブラリをインストールする必要がありました。

答え3

まだ試してみていないので、ただ考えです。

/lib64/ld-linux-x86-64.so.2: No such file or directoryライブラリをインストールしていないために発生します。

外部アーキテクチャ用のライブラリを追加する必要があります。

Debian には、それを管理する複数のアーキテクチャパッケージ(私の記憶が正しい場合)があります。外部アーキテクチャは、オペレーティングシステムが別のパッケージをインポートする場所であるDebianリポジトリで使用できます。

ライブラリの混乱を避けるために、chroot / mount名前空間を使用できます。

関連情報