golang语言下,在x86的linux平台上编译arm64二进制

转载自:https://www.annhe.net/article-4542.html

==================

 

编译etcd测试工具benchmark:

CGO_ENABLED=0 GOOS=linux GOARCH=arm64 go build .

 

 

概述

有很多开源软件并没有提供 arm 安装包或者二进制,或者能通过包管理工具安装但是版本比较旧(比如 Pandoc)。如果想为树莓派编译软件,一个方法是直接在树莓派上编译,另外就是在 x86 平台上借助 qemu-user-static 来构建 armv7l 或者 aarch64 编译环境。使用 qemu-user-static 方法的好处是方便在 CI 里编译,毕竟大部分 CI 服务都是 x86 环境。另外一个好处是能够编译大型的耗内存的软件,树莓派的内存最大只有 8GB,某些软件,比如 Pandoc,可能遇到内存不足的情况。

qemu-user-static

  • 安装:apt install qemu-user-static
  • 下载基础文件系统,比如 arm64 的 Ubuntu:aria2c -x 16 http://cdimage.ubuntu.com/ubuntu-base/releases/19.10/release/ubuntu-base-19.10-base-arm64.tar.gz
  • mkdir rootfs
  • cd rootfs
  • tar xvf ../ubuntu-base-19.10-base-arm64.tar.gz
  • 复制对应版本的 qemu-user-static 到 chroot 环境:cp /usr/bin/qemu-aarch64-static usr/bin
  • 复制 DNS 配置:cp /etc/resolv.conf etc
  • 挂载文件系统

然后使用 chroot . /bin/bash 就可以 chroot 到这个 aarch64 架构的 Ubuntu 系统了。

持续集成

chroot 的命令格式为:

如果要在持续集成中使用 qemu-user-static , chroot 时的 [COMMAND [ARG]...] 改为要执行的脚本即可,比如将构建过程写在 build.sh 中并复制到 chroot 环境的根目录,然后执行以下代码即可:

下面是使用 Github Action 编译 Pandoc aarch64 的一个例子。

后记

折腾这些主要是想给树莓派编译最新的 Pandoc,但是折腾了半个月,还是没成功,主要是 qemu-user-static 性能比较差,Haskell 编译本来就不快。结果就是 6 小时都没法执行完成,超过了 Github Action 的限制。还有就是 Haskell 编译很耗内存,Github Action 内存已经挺大了,还需要建 swap。但是这种方法应该还是有意义的,其他程序应该不至于这么耗时。

还是 Golang 方便,编译快,交叉编译也很简单:

参考资料

posted @   larybird  阅读(1284)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 分享4款.NET开源、免费、实用的商城系统
· 全程不用写代码,我用AI程序员写了一个飞机大战
· MongoDB 8.0这个新功能碉堡了,比商业数据库还牛
· 白话解读 Dapr 1.15:你的「微服务管家」又秀新绝活了
· 记一次.NET内存居高不下排查解决与启示
点击右上角即可分享
微信分享提示