You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在Linux BuildRoot中借助Qemu编译并运行Golang程序

在BuildRoot中借助Qemu运行Golang程序

一、交叉编译Go程序到ARM架构

Go原生支持跨平台交叉编译,结合BuildRoot提供的ARM工具链可生成适配目标环境的二进制:

  1. 配置交叉编译环境变量(替换为你实际的BuildRoot工具链名称):
    export GOARCH=arm
    export GOARM=7  # 根据目标ARM内核版本调整,如v6/v7
    export CGO_ENABLED=1
    export CC=arm-buildroot-linux-uclibcgnueabi-gcc
    
    • CGO_ENABLED=1:启用CGO以链接BuildRoot的uclibc库,确保程序与目标环境兼容;若为纯Go无C依赖的程序,可设为0生成静态二进制,无需依赖系统库。
  2. 编译你的Go程序:
    go build -o hello-arm hello.go
    
    若生成无依赖的静态二进制,用此命令:
    export GOARCH=arm
    export GOARM=7
    export CGO_ENABLED=0
    go build -o hello-arm-static hello.go
    

二、将编译好的程序植入BuildRoot根文件系统

直接把编译后的二进制拷贝到BuildRoot的目标根文件系统目录,确保镜像生成时包含该程序:

cp hello-arm output/target/usr/bin/

若之前已生成过根文件系统镜像,重新同步并生成:

make target-finalize

三、借助Qemu运行Go程序

启动Qemu ARM虚拟机(参数根据你的BuildRoot配置调整,比如内核、dtb、镜像路径):

qemu-system-arm -M versatilepb -kernel output/images/zImage -dtb output/images/versatile-pb.dtb -drive file=output/images/rootfs.ext2,if=scsi,format=raw -append "root=/dev/sda console=ttyAMA0" -serial stdio -net nic -net user

进入Qemu终端后,直接执行你的程序:

hello-arm

注意事项

  • 确保主机已安装Go环境(建议1.11+版本,ARM支持更完善);
  • 静态二进制(CGO_ENABLED=0编译)无需依赖目标环境的系统库,拷贝后即可直接运行;
  • 若程序依赖网络、特定文件路径等资源,需确保Qemu启动时配置了对应权限(如-net user开启网络)。

内容的提问来源于stack exchange,提问作者jason

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.14 06:15:11