Raspberry-Pi

在 rasbian 上模擬 x86

  • July 9, 2021

我想在執行 rasbian 的 Raspberry Pi 上執行 Starbound 伺服器。

伺服器是為在 x86 架構上執行而建構的,所以我的目標是模擬 x86 架構來執行伺服器。

編輯:box86 不執行 64 位 x86 二進製文件

為此,我嘗試使用box86

它允許執行 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 一起提供,所以我嘗試使用-L參數來指定不同的 ld- 文件。但似乎該程序只查看 /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]

感謝評論中的斯蒂芬·基特。

使用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

只是想法,因為我沒有嘗試過。

/lib64/ld-linux-x86-64.so.2: No such file or directory是由未安裝的庫引起的。

您將需要為外部架構添加庫。

在 debian 中,有一個 multiarch 包(如果我沒記錯的話)管理它。可以從 Debian 儲存庫中提取外部架構:與您的作業系統獲取其他軟體包的位置相同。

您可能需要使用 chroot / mount 命名空間,以避免庫混淆。

引用自:https://unix.stackexchange.com/questions/634258