是否可以在 ARM 上运行 x86 可执行文件?

Sva*_*sky 6 arm debian executable x86 chrome-book

我正在尝试将 Navicat 这是一个 x86-64 二进制文件安装到我的 aarch64 机器上,这导致“无法执行二进制文件:Exec 格式错误”

这是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

有什么办法可以在我的机器上运行这个可执行文件吗?

(Idk 如果这有什么不同,但我在带 OP1 处理器的三星 Chromebook Plus 上运行 Linux)

小智 7

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
Run Code Online (Sandbox Code Playgroud)

b. 设置 Debian 以支持多架构。

sudo dpkg --add-architecture amd64
sudo apt-get update
sudo apt-get upgrade
Run Code Online (Sandbox Code Playgroud)

C。测试一下。(假设您尚未安装该hello架构的软件包aarch64。)

sudo apt-get install hello:amd64
hello
Run Code Online (Sandbox Code Playgroud)

这将打印熟悉的“Hello, World!” 使用二进制消息amd64。


phu*_*clv 6

每种架构都使用自己的硬件语言,因此当然 ARM CPU 只能在本地运行 ARM 二进制文件。如果要为其他架构运行二进制文件,则需要使用模拟器。最著名的 x86-64 模拟器是qemu和bochs

但是仿真非常慢,所以它不适合时间敏感的应用程序,应该是最后的手段。如果可用,您最好从源代码重新编译,或者找到 ARM 替代软件

  • 我只是放弃了模拟器,我没有说他们的模拟模式。它并不慢,但仍然比原生应用程序更糟糕。我从来没有说过永远不要使用它们,只是**先找到一个本地解决方案** (3认同)
  • @mosvy 当然我知道 qemu 具有用户模式仿真,但正如我所说,它仍然是最后的手段。本机解决方案总是更好 (2认同)