0x001 Team

golang编译

一、交叉编译

只需设置 GOOS 和 GOARCH 两个环境变量就能生成所需平台的Go程序

比如生成mac osx上可以执行的程序

1
[mac]# GOOS=darwin GOARCH=amd64 go build test.go

所有可以交叉编译的OS和ARCH的值如下:

$GOOS $GOARCH
darwin 386
darwin amd64
darwin arm
darwin arm64
dragonfly amd64
freebsd 386
freebsd amd64
freebsd arm
linux 386
linux amd64
linux arm
linux arm64
linux ppc64
linux ppc64le
netbsd 386
netbsd amd64
netbsd arm
openbsd 386
openbsd amd64
openbsd arm
plan9 386
plan9 amd64
solaris amd64
windows 386
windows amd64

二、编译文件最小化

  1. 编译go文件,去掉符号信息和调试信息
    -a 强制编译所有依赖包。
    -s 去掉符号信息
    -w 去掉DWARF调试信息,得到的程序就不能用gdb调试了

    1
    [mac]# go build -ldflags "-s -w" hello.go
  2. upx压缩文件

    1
    [mac]# upx -9 -k hello