大多情况下 Go 交叉编译跨平台是很简单的,只要指定 GOOS 和 GOARCH 即可,但是一旦涉及到C库编译,比如代码中带有 golang-sqlite 这类扩展时候,就不好使了,本工具就是为了方便这种情况使用。
如果需要指定 Go 版本和使用 CGO,请先自行安装好 Docker 环境。
Zzz 工具使用方法
zzz build --os windows,darwin,linux --go 1.14 # 说明请执行 zzz build --help
使用示例
# 提取依赖到项目目录免得还需要去容器内去下载一遍依赖,非必须 go mod vendor # linux amd64 zzz build --os linux/amd64 # 开启 CGO 编译 windows 与 darwin zzz build --cgo --os win/64,mac/64 # 等同 zzz build --cgo --os windows/amd64,darwin/amd64 # golang 1.11 CGO 编译 windows x86 zzz build --cgo --os windows/386 --go 1.11 -- -ldflags "-s -w"
upx 压缩
upx 是一个常用的压缩动态库和可执行文件的工具,通常可减少 50-70% 的体积,但在启动时解压缩会多消耗 cpu 和内存。
upx 的安装方式非常简单,我们可以直接从 github 下载最新的 release 版本,支持 Windows 和 Linux,在 Ubuntu 或 Mac 可以直接使用包管理工具安装。
例如 Mac 下可以直接使用 brew:
brew install upx
。使用示例
# upx 有很多参数,最重要的则是压缩率,1-9,1 代表最低压缩率,9 代表最高压缩率:upx -9 ./xxx upx --brute ./go程序