golang如何在一个平台编译另外一个平台可以执行的文件。

参数

  • GOOS:目标操作系统
  • GOARCH:目标操作系统的架构
  • CGO_ENABLED=0 参数配置为0的时候就关闭C语言版本的编译器了。自从golang1.5以后go就使用go语言编译器进行编译了。

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

CGO_ENABLED=0 GOOS=linux GOARCH=amd64 go build main.go
CGO_ENABLED=0 GOOS=windows GOARCH=amd64 go build main.go

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

CGO_ENABLED=0 GOOS=darwin GOARCH=amd64 go build main.go
CGO_ENABLED=0 GOOS=windows GOARCH=amd64 go build main.go

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

CGO_ENABLED=0 GOOS=darwin GOARCH=amd64 go build hello.go
CGO_ENABLED=0 GOOS=linux GOARCH=amd64 go build hello.go

build

GO111MODULE=on CGO_ENABLED=0 GOOS=linux go build -a -installsuffix cgo -ldflags "-s -w" -o app app.go
usage: go build [-o output] [-i] [build flags] [packages]

用法:  go build [-o output] [-i] [build 参数] [包]

-o 指定输出的文件名
-v 打印编译时的包名
-x 打印编译时用到的命令
-a 强制重新构建
-installsuffix
-ldflags 'flag list'
    '-s -w': 压缩编译后的体积
    -s: 去掉符号表
    -w: 去掉调试信息,不能gdb调试