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等。
相关推荐
古城小栈2 分钟前
Go + 边缘计算:工业质检 AI 模型部署实践指南
人工智能·golang·边缘计算
running up17 分钟前
Spring Bean生命周期- BeanDefinition 加载与 BeanFactoryPostProcessor BeanPostProcessor
java·后端·spring
222you26 分钟前
Java线程的三种创建方式
java·开发语言
云上漫步者32 分钟前
深度实战:Rust交叉编译适配OpenHarmony PC——unicode_width完整适配案例
开发语言·后端·rust·harmonyos
漫漫求36 分钟前
Java内存模型【JMM】、JVM内存模型
java·开发语言·jvm
田姐姐tmner42 分钟前
Python 全面语法指南
开发语言·python
white-persist1 小时前
【攻防世界】reverse | simple-check-100 详细题解 WP
c语言·开发语言·汇编·数据结构·c++·python·算法
wuguan_1 小时前
C#中的静态成员、常量和只读变量
开发语言·c#
Java水解1 小时前
MySQL必备基础
后端·mysql
Java水解1 小时前
Spring AOP原理深度解析:代理模式、JDK动态代理与CGLIB
后端·spring