温馨提示×

linux中golang如何交叉编译

小樊
40
2026-10-24 18:58:16
栏目: 编程语言

在 Linux 下使用 Golang 进行交叉编译 其实非常简单,Go 原生支持交叉编译,不需要额外安装目标平台的工具链(除了某些特殊情况,比如 CGO)。


一、基本交叉编译方式

Go 通过两个环境变量控制目标平台:

  • GOOS:目标操作系统
  • GOARCH:目标 CPU 架构

基本命令格式

GOOS=target-os GOARCH=target-arch go build -o outputname main.go

二、常见示例

1️⃣ Linux → Windows

GOOS=windows GOARCH=amd64 go build -o app.exe main.go

2️⃣ Linux → macOS

GOOS=darwin GOARCH=amd64 go build -o app-mac main.go

3️⃣ Linux → ARM(如树莓派)

GOOS=linux GOARCH=arm GOARM=7 go build -o app-arm main.go

4️⃣ Linux → 64 位 ARM

GOOS=linux GOARCH=arm64 go build -o app-arm64 main.go

三、查看支持的平台

go tool dist list

输出示例:

linux/amd64
linux/arm64
windows/386
windows/amd64
darwin/arm64
...

四、CGO 的情况(重要)

✅ 纯 Go 代码

交叉编译 完全没问题

❌ 使用了 CGO(如 sqlite、某些加密库)

需要目标平台的 C 编译器

例如编译 Windows:

CC=x86_64-w64-mingw32-gcc \
GOOS=windows GOARCH=amd64 \
CGO_ENABLED=1 go build -o app.exe main.go

关闭 CGO(最简单):

CGO_ENABLED=0 GOOS=windows GOARCH=amd64 go build -o app.exe main.go

五、常用环境变量总结

变量 说明
GOOS 目标系统(linux/windows/darwin)
GOARCH 目标架构(amd64/arm/arm64)
GOARM ARM 版本(6/7)
CGO_ENABLED 是否启用 CGO
CC C 编译器路径

六、一键编译多平台脚本示例

#!/bin/bash

for os in linux windows darwin; do
  for arch in amd64 arm64; do
    echo "Building $os/$arch"
    GOOS=$os GOARCH=$arch go build -o bin/app-$os-$arch main.go
  done
done

如果你有 具体目标平台(比如 Android、MIPS、RISC-V)或 用了什么库(如 SQLite),可以告诉我,我可以给你更精确的命令。

0 踩