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


10

我在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?如何armhfarm64服务器上运行可执行文件?


显然,所有依赖项以及解释器也都必须是32位的
YoureAGitForNotUsingGit

你表演过apt-get update; apt-get upgrade之后dpkg --add-architecture armhf吗?
Marcos Silveira

@MarcosSilveira是的,没有区别。
内森·奥斯曼

Answers:


16

在arm64上,对ARM32的支持是可选的。实际上,只有一个arm64 CPU遗漏了传统的arm32指令集支持-Cavium ThunderX。从内核版本字符串来看,您似乎正在使用Scaleway armv8服务器。在这种情况下,您就不走运了-Scaleway armv8服务器基于ThunderX。请改用Scaleway C1,它是原生arm32。


2
很好的猜测,我正在使用Scaleway。感谢您的澄清。
内森·奥斯曼

1
Packet的2A型服务器也是基于ThunderX的,并且也受此限制。
vielmetti
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.