1. 交叉编译

一个平台上可以生成另一个平台的可执行代码。例如在64为windows操作系统开发环境上,生成linux上的可执行程序

2. 环境变量详解

2.1 常用环境变量

  1. set GO111MODULE=on // 启用go mod
  2. set GOARCH=amd64 // 程序构建环境的目标CPU架构
  3. set GOBIN= // 开发程序编译后二进制命令的安装目录
  4. set GOHOSTARCH=amd64 // 主机CPU架构
  5. set GOHOSTOS=windows // 主机操作系统
  6. set GOMODCACHE=E:\goproject\pkg\mod // go mod下载的包的目录
  7. set GOOS=windows // 程序构建环境的目标操作系统
  8. set GOPATH=E:\goproject // 工作目录
  9. set GOPROXY=https://goproxy.cn,direct // 代理
  10. set GOROOT=D:\go1.17.4 // go安装目录
  11. set GOVERSION=go1.17.4 // go版本

2.2 cgo相关环境变量

  1. set GCCGO=gccgo
  2. set AR=ar
  3. set CC=gcc
  4. set CXX=g++
  5. set CGO_ENABLED=1 // 设置CGO工具,允许在Go代码中调用C代码
  6. set CGO_CFLAGS=-g -O2
  7. set CGO_CPPFLAGS=
  8. set CGO_CXXFLAGS=-g -O2
  9. set CGO_FFLAGS=-g -O2
  10. set CGO_LDFLAGS=-g -O2

2.3 GOOS和GOARCH取值范围

GOOS和GOARCH的值成对出现,而且只能是下面列表对应的值

  1. $GOOS $GOARCH
  2. android arm
  3. darwin 386
  4. darwin amd64
  5. darwin arm
  6. darwin arm64
  7. dragonfly amd64
  8. freebsd 386
  9. freebsd amd64
  10. freebsd arm
  11. linux 386
  12. linux amd64
  13. linux arm
  14. linux arm64
  15. linux ppc64
  16. linux ppc64le
  17. linux mips
  18. linux mipsle
  19. linux mips64
  20. linux mips64le
  21. linux s390x
  22. netbsd 386
  23. netbsd amd64
  24. netbsd arm
  25. openbsd 386
  26. openbsd amd64
  27. openbsd arm
  28. plan9 386
  29. plan9 amd64
  30. solaris amd64
  31. windows 386
  32. windows amd64

3. 如何操作

Go语言进行交叉编译只需要设置GOOS和GOARCH这两个环境变量就可以了 。但是由于Go默认是开启cgo工具,而Go交叉编译暂不支持CGO,所以需要禁用它 参考资料
windows

  1. set CGO_ENABLED=0
  2. set GOARCH=amd64
  3. set GOOS=linux
  4. go build xxx.go

Linux

  1. CGO_ENABLED=0 GOOS=windows GOARCH=amd64 go build xxx.go