Golang代码的交叉编译

写在前面

在没有接触编程之前,是不太会理解这个“交叉编译”这个名词的,接触了代码以后,就会考虑到不同平台之间如何将一套代码打包成其他平台可以使用的文件,这时候就会用到“交叉编译”这个技术。

编译有两种方式:

  • 本地编译
  • 交叉编译

本地编译好理解,就是在本地环境去编译代码,得到的执行软件/程序只能用到本地或者和本地同架构的环境。比如在本地windows上编译好的软件/程序,就可以应用到windows环境(我们可称之为同构平台)中,当然这个还有个系统版本兼容问题,这里不表。

交叉编译是在本地环境上可以编译出异构平台使用的软件/程序。比如本地windows上编译出在macos或者linux上使用的软件,当然这里我们不去深究系统版本兼容和CPU架构的问题,那样就复杂了。

golang交叉编译用例

对于golang代码,这里可参考如下:

1. Mac 下编译 Linux 和 Windows 64位可执行程序

1
2
3
4
5
6
7
8
9
  CGO_ENABLED=0 
  GOOS=linux 
  GOARCH=amd64 
  go build main.go
  
  CGO_ENABLED=0 
  GOOS=windows 
  GOARCH=amd64 
  go build main.go

2. Linux 下编译 Mac 和 Windows 64位可执行程序

1
2
3
4
5
6
7
8
9
  CGO_ENABLED=0 
  GOOS=darwin 
  GOARCH=amd64 
  go build main.go
  
  CGO_ENABLED=0 
  GOOS=windows 
  GOARCH=amd64 
  go build main.go

3. Windows 下编译 Mac 和 Linux 64位可执行程序

1
2
3
4
5
6
7
8
9
  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 main.go

GOOS:目标平台的操作系统(darwin、freebsd、linux、windows) GOARCH:目标平台的体系架构(386、amd64、arm) 交叉编译不支持 CGO 所以要禁用它

updatedupdated2024-01-262024-01-26