ZGGSONG WIKI

Go交叉编译

Mac下编译

编译linux二进制文件

CGO_ENABLED=0 GOOS=linux GOARCH=arm64 go build .

编译windows二进制文件

CGO_ENABLED=0 GOOS=windows GOARCH=arm64 go build .

Linux下编译

编译mac二进制文件

CGO_ENABLED=0 GOOS=darwin GOARCH=arm64 go build .

编译windows二进制文件

CGO_ENABLED=0 GOOS=windows GOARCH=arm64 go build .

Windows下编译

编译mac二进制文件

SET CGO_ENABLED=0
SET GOOS=darwin
SET GOARCH=arm64
go build .

编译linux二进制文件

SET CGO_ENABLED=0
SET GOOS=linux
SET GOARCH=arm64
go build filename.go

说明

  1. Go交叉编译涉及参数说明:
  • GOARCH 目标平台的CPU架构,常用值 amd64 arm64 i386 armhf
  • GOOS 目标平台,常用的值 linux windows drawin(macOS) freebsd
  • GOARM 只有GOARCHarm64才有效,表示arm版本,只能是5, 6, 7其中之一
  • CGO_ENABLED 是否支持CGO交叉编译,值只能是0, 1 默认情况下是0 启用交叉汇编比较麻烦
  • CC 当支持交叉汇编时(即 CGO_ENABLED=1), 编译目标文件使用的 c 编译器.
  • CXX 当支持交叉汇编时(即 CGO_ENABLED=1), 编译目标文件使用的 c++ 编译器.
  • AR 当支持交叉汇编时(即 CGO_ENABLED=1), 编译目标文件使用的创建库文件命令.
  • i386=Intel 80386。其实i386通常被用来作为对Intel(英特尔)32位微处理器的统称。
  • amd64,又称“x86-64”或“x64”,是一种64位元的电脑处理器架构。它是建基于现有32位元的x86架构,由AMD公司所开发。
  1. 一般来说用不支持CGO的方式即可,只需要设置 GOOS GOARCH GOARM(只有arm架构的平台需要配置)
  2. 支持CGO => CGO_ENABLED=1 需要设置 CC CXX AR 更多查看详情cgo is not go
  3. golang的交叉编译要保证golang版本在1.5以上

可选参数-ldflags 是编译选项:

  • -s -w 去掉调试信息,可以减小构建后文件体积,
  • -H windowsgui

实例:windows下Go打包二进制文件去除cmd窗口,并去除调试信息

go build -ldflags="-H windowsgui -s -w"
Copyright © 2022 ZGGSONG