如何在 arm64 系统上运行 armhf 可执行文件?

如何在 arm64 系统上运行 armhf 可执行文件?

我在 arm64 服务器上安装了 Ubuntu 16.04.2 LTS:

# uname -a
Linux test 4.9.23-std-1 #1 SMP Mon Apr 24 13:18:14 UTC 2017 aarch64 aarch64 aarch64 GNU/Linux

我运行以下命令来启用armhf包安装:

# dpkg --add-architecture armhf

然后我安装了该traceroute包:

# apt-get install traceroute:armhf
Reading package lists... Done
Building dependency tree
[...]
Preparing to unpack .../traceroute_1%3a2.0.21-1_armhf.deb ...
Unpacking traceroute:armhf (1:2.0.21-1) ...
Processing triggers for man-db (2.7.5-1) ...

但是,我无法启动可执行文件:

# traceroute
-bash: /usr/sbin/traceroute: cannot execute binary file: Exec format error

更多信息:

# file /usr/bin/traceroute.db
/usr/bin/traceroute.db: ELF 32-bit LSB shared object, ARM, EABI5 version 1 (SYSV),
    dynamically linked, interpreter /lib/ld-linux-armhf.so.3, for GNU/Linux
    2.6.32, BuildID[sha1]=0ebd0553e26b163dd848c131fe8ee0a4a2409109, stripped
# ldd /usr/bin/traceroute.db
        not a dynamic executable

我也尝试安装binfmt-support并确认binfmt_misc模块已加载。

arm64向后兼容armhf?如何在服务器armhf上运行可执行文件arm64

答案1

在 arm64 上,arm32 支持是可选的。实际上,只有一个 arm64 CPU 省略了旧式 arm32 指令集支持 - Cavium ThunderX。从内核版本字符串来看,您似乎正在使用 Scaleway armv8 服务器。如果是这种情况,那么您就倒霉了 - Scaleway armv8 服务器基于 ThunderX。请改用 Scaleway C1,它是原生的 arm32。

相关内容