交叉编译是在一个平台上生成另一个平台上的可执行代码。 同一个体系结构可以运行不同的操作系统;同样,同一个操作系统也可以在不同的体系结构上运行。

什么是交叉编译

  • 众所周知,Golang开发的项目,部署起来非常简单,将编译好的二进制文件直接丢到服务器上就可以运行了;
  • 开发过程中,每个开发者可能习惯用不同的平台开发,有人习惯用Mac,有人习惯windows等,但是因为操作系统和CPU架构的不同,不同平台上编译生成的二进制文件,是不能通用运行的,这时候就需要用到交叉编译;

Golang的交叉编译

在 Mac、Linux、Windows下的交叉编译:

  • Mac 下编译 Linux 和 Windows 64位可执行程序
CGO_ENABLED=0 GOOS=linux GOARCH=amd64 go build
CGO_ENABLED=0 GOOS=windows GOARCH=amd64 go build
  • Linux 下编译 Mac 和 Windows 64位可执行程序
CGO_ENABLED=0 GOOS=darwin GOARCH=amd64 go build
CGO_ENABLED=0 GOOS=windows GOARCH=amd64 go build
  • Windows 下编译 Mac 和 Linux 64位可执行程序
SET CGO_ENABLED=0
SET GOOS=darwin
SET GOARCH=amd64
go build main.go

SET CGO_ENABLED=0
SET GOOS=linux
SET GOARCH=amd64
go build 

GOOS:目标平台的操作系统(darwin、freebsd、linux、windows)

GOARCH:目标平台的体系架构(386、amd64、arm)

交叉编译不支持 CGO 所以要禁用它