如何在我的linux/arm64/v8
/amd64
主机上使用x86_64
平台运行Erlang命令?我试图建立一个多平台码头形象跟随正式文件。在使用erlang运行构建步骤时,我的构建失败了。下面是构建失败的根本原因: Erlang命令在在segmentation fault
主机上模拟arm64
时返回arm64
,尽管arm/v7
可以工作。
我已经在两台机器上进行了测试:Windows 10, WSL 2 Ubuntu 20.04, Docker Desktop, x84_64
;Ubuntu 20.04, x86_64
。我在tonistiigi/binfmt上测试了qemu版本的6.2.0
和7.0.0-28
,使用它们各自的标记来安装模拟器。
假设已安装了Docker,则在任一x86_64主机上进行复制的步骤:
$ docker run --privileged --rm tonistiigi/binfmt --install all
{
"supported": [
"linux/amd64",
"linux/arm64",
"linux/riscv64",
"linux/ppc64le",
"linux/s390x",
"linux/386",
"linux/mips64le",
"linux/mips64",
"linux/arm/v7",
"linux/arm/v6"
],
"emulators": [
"qemu-aarch64",
"qemu-arm",
"qemu-mips64",
"qemu-mips64el",
"qemu-ppc64le",
"qemu-riscv64",
"qemu-s390x"
]
}
$ docker run --rm -it --platform linux/arm64 erlang:latest /bin/bash
root@d7f9b846f13a:/# uname -m
aarch64
root@d7f9b846f13a:/# erl
qemu: uncaught target signal 11 (Segmentation fault) - core dumped
Segmentation fault
$ docker inspect erlang:latest --format '{{.Os}}/{{.Architecture}}/{{.Variant}}'
linux/arm64/v8
上面,platform linux/arm64
正在与linux/arm64/v8
混叠。运行erl
时出现分段错误时失败。我希望它能与linux/arm/v7
一样工作,它能够启动erl
会话,如下所示。
$ docker run --rm -it --platform linux/arm/v7 erlang:latest /bin/bash
root@5a786052f0e4:/# uname -m
armv7l
root@5a786052f0e4:/# erl
Erlang/OTP 25 [erts-13.1.1] [source] [32-bit] [smp:2:2] [ds:2:2:10] [async-threads:1]
Eshell V13.1.1 (abort with ^G)
1>
$ docker inspect erlang:latest --format '{{.Os}}/{{.Architecture}}/{{.Variant}}'
linux/arm/v7
如何在我的linux/arm64/v8
/amd64
主机上使用x86_64
平台运行Erlang命令?
发布于 2022-10-05 19:30:23
由于qemu中的错误/缺失特性,erlang在运行时会出现分段错误。因此,您需要在不使用jit的情况下编译erlang,或者使用没有jit的erlang的旧版本。
有关更多细节,请参见https://github.com/erlang/otp/pull/6340。
https://stackoverflow.com/questions/73954808
复制相似问题