记录一下在M1上跨平台编译的解决方案

自从用了M1以后,工作体验是改善了不少,但是服务器使用的程序还是x86指令集的,搞个x86的机器编译或者用虚拟机都感觉不大方便。所以就有了这个想法,启动一个x86_64的docker容器来编译。

快速启动一个x86_64容器

这边主要是为了阻止Docker生成或者拉取arm64架构的容器,如果要编译其他平台的容器自行搜索 doucker buildx 的使用方法

# build
docker build --platform linux/x86_64 .
# run
docker run --platform  -t -i linux/amd64 IMAGE bash
# 最终效果
root@472ffe071aeb:/# uname -a
Linux 472ffe071aeb 5.10.25-linuxkit #1 SMP PREEMPT Tue Mar 23 09:24:45 UTC 2021 x86_64 GNU/Linux

其中,-t 选项让Docker分配一个伪终端(pseudo-tty)并绑定到容器的标准输入上, -i 则让容器的标准输入保持打开。

目前使用正常


2022-10-16 更新

由于最近需要在一些ARM的设备或者龙芯之类的指令集上编译,很多x86的处理器(比如至强)还是效率高很多,亲测也是可以通过上述方法实现跨平台编译,比虚拟机方便,windows也支持。(Golang的CGo对交叉编译支持的并不好,还是docker方便


完美使用服务器强大的性能,再也不用等开发板编译了

打包跨平台使用的Docker镜像

使用Docker buildx 工具

点赞