温馨提示×

linux中golang如何交叉配置

小樊
44
2026-10-07 02:54:04
栏目: 编程语言

在 Linux 下使用 **Go(Golang)进行交叉编译(cross compile)**是非常简单的,因为 Go 原生支持交叉编译,不需要额外安装目标平台的编译器(除非用到 cgo)。

下面按常见场景说明。


一、基本交叉编译方式(纯 Go 代码)

1️⃣ 核心环境变量

交叉编译主要依赖两个环境变量:

GOOS      # 目标操作系统
GOARCH    # 目标 CPU 架构

2️⃣ 常见组合示例

编译为 Windows(64 位)

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

编译为 macOS(Intel)

GOOS=darwin GOARCH=amd64 go build -o app_darwin main.go

编译为 macOS(Apple Silicon)

GOOS=darwin GOARCH=arm64 go build -o app_darwin_arm64 main.go

编译为 Linux ARM(如树莓派)

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

二、查看支持的 GOOS / GOARCH

go tool dist list

示例输出:

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

三、使用 Makefile 统一交叉编译(推荐)

BINARY=app

build-linux:
	GOOS=linux GOARCH=amd64 go build -o $(BINARY)_linux

build-windows:
	GOOS=windows GOARCH=amd64 go build -o $(BINARY).exe

build-mac:
	GOOS=darwin GOARCH=arm64 go build -o $(BINARY)_mac

all:
	make build-linux build-windows build-mac

使用:

make all

四、涉及 CGO 的交叉编译(重要)

如果你的项目 使用了 CGO(例如 SQLite、某些加密库),需要目标平台的 C 编译器。

1️⃣ 关闭 CGO(最简单)

CGO_ENABLED=0 GOOS=windows GOARCH=amd64 go build

✅ 推荐方式(大多数场景可用)


2️⃣ 启用 CGO(需要交叉工具链)

例如在 Linux 编译 Windows 程序:

CGO_ENABLED=1 \
GOOS=windows GOARCH=amd64 \
CC=x86_64-w64-mingw32-gcc \
go build

需要安装:

sudo apt install gcc-mingw-w64

五、交叉编译 ARM Linux(常见坑)

ARM 架构说明

GOARCH GOARM 示例
arm 7 树莓派 3/4
arm64 - 树莓派 4(64位)

示例:

GOOS=linux GOARCH=arm64 go build

六、常见问题

❓ 编译后无法运行

  • 架构不匹配
  • 使用了 cgo 但没关
  • 动态链接问题(用 file 命令检查)
file app

❓ 依赖平台相关代码

// +build windows

或

//go:build windows

七、总结一句话

Linux 下 Go 交叉编译一句话:

GOOS=目标系统 GOARCH=目标架构 go build

如果你有具体目标(比如:树莓派 / Windows / macOS / ARM),我可以给你精确命令。

0 踩