Golang 中的交叉编译详解

Golang 中的交叉编译

在 Golang 中,交叉编译指的是在同一台机器上生成针对不同操作系统或硬件架构的二进制文件。这在开发跨平台应用或构建特定平台的发布版本时非常有用。

交叉编译 Golang 程序的基本步骤如下:

  1. 指定目标操作系统和工具链并设置对应的环境变量

在编译时,需要指定目标操作系统和工具链。可以通过设置 GOOS 和 GOARCH 环境变量来实现。例如,如果想要编译一个针对 Linux 的 ARM 程序,可以设置如下环境变量:

复制代码
GOOS=linux  
GOARCH=arm
  1. 进入源代码目录执行编译命令

在开始编译之前,需要切换到包含源代码的目录,使用 go build 命令来编译程序。

在 mac 上交叉编译

复制代码
# 编译出可以在 Windows 中运行的二进制文件
CGO_ENABLED=0 GOOS=windows GOARCH=amd64 go build main.go

# 编译出可以在 Linux 中运行的二进制文件
CGO_ENABLED=0 GOOS=linux GOARCH=amd64 go build main.go

在 Linux 上交叉编译

复制代码
# 编译出可以在 Windows 中运行的二进制文件
CGO_ENABLED=0 GOOS=windows  GOARCH=amd64  go build main.go

# 编译出可以在 mac 中运行的二进制文件
CGO_ENABLED=0 GOOS=darwin  GOARCH=amd64  go build main.go

在 Windows 上交叉编译

Windows 和 Mac、Linux 有点不同,可以通过写批处理程序来完成,设置编译出可以在 mac 中运行的二进制文件的编译环境如下:

复制代码
SET  CGO_ENABLED=0
SET GOOS=darwin
SET GOARCH=amd64
go build main.go

设置编译出可以在 Linux 中运行的二进制文件的编译环境如下:

复制代码
SET CGO_ENABLED=0
SET GOOS=linux
SET GOARCH=amd64
go build main.go

上面几个示例中各环境变量的意思如下:

  • CGO_ENABLED:CGO_ENABLED=0 意思是禁用 CGO,因为交叉编译不能启用 CGO。
  • GOOS:表示目标平台,例如 mac 系统对应 darwin,linux 系统对应 linux,windows 系统对应 windows等。
  • GOARCH:目标平台的架构,例如 amd64,arm等。
相关推荐
掘金者阿豪几秒前
SQL Server 迁到金仓,真正麻烦的不是数据,而是这些 T-SQL
后端
问天_观心8 分钟前
大模型微调学习(一)
开发语言·人工智能·学习·语言模型·github
阿里嘎多学长13 分钟前
2026-09-03 GitHub 热点项目精选
开发语言·程序员·github·代码托管
FfHUCisI16 分钟前
Golang Map 哈希表实现
golang·哈希算法·散列表
Kyrie_kk24 分钟前
Java--IO--Path文件访问
java·后端
wxwx_bscxy32237 分钟前
基于springboot宠物领养系统的设计与实现
数据库·spring boot·后端·spring·宠物
分支预测失败1 小时前
RISC-V AIA 中断架构实战:从 PLIC 到 APLIC 与 IMSIC 的迁移
linux·后端
源代码•宸1 小时前
前置准备:定时微服务背景和现状
开发语言·经验分享·后端·微服务·云原生·架构·golang
我的div丢了肿么办1 小时前
go语言中的map,map定义不同的数据类型,循环map,map的无序性
后端·go
2601_967338711 小时前
C#上位机开发零基础入门到精通全套视频
开发语言·c#