go编译可执行文件

交叉编译工具gox

Golang 交叉编译跨平台的可执行程序 (Mac、Linux、Windows )

Golang支持交叉编译,也就是说你在32位平台的机器上开发,可以编译生成64位平台上的可执行程序.mac 下可以编译linux 下的执行程序 又或者windows下的执行程序
交叉编译依赖下面几个环境变量:
$GOARCH 目标平台(编译后的目标平台)的处理器架构(386、amd64、arm)
$GOOS 目标平台(编译后的目标平台)的操作系统(darwin、freebsd、linux、windows)

// 查看支持的平台
go tool dist list
OS ARCH OS version
linux 386 / amd64 / arm >= Linux 2.6
darwin 386 / amd64 OS X (Snow Leopard + Lion)
freebsd 386 / amd64 >= FreeBSD 7
windows 386 / amd64 >= Windows 2000

不带前面参数的 go build 只是编译出开发环境适用的执行文件。

windows 下面的专有参数,去掉运行后的 dos 黑窗口
go build -ldflags=”-H windowsgui”

使用 go env 命令,查看系统的配置环境,可以看到GOARCH(当前系统)是amd64
执行 set GOARCH=386 配置go输出系统平台为32位,此时再用go env命令查看系统的配置环境
然后编译就是 32 位的程序了

默认是带有调试信息的,如果想获得小的 size 可以去掉调试信息
By default, go build combines symbol and debug info with binary files. However, you can remove the symbol and debug info with go build -ldflags=-w prog.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
CGO_ENABLED=0 GOOS=windows GOARCH=386 go build main.go

//编译目录
CGO_ENABLED=0 GOOS=linux GOARCH=amd64 go build

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位可执行程序

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

# windows上编译mac和linux二进制
SET CGO_ENABLED=0 SET GOOS=darwin SET GOARCH=amd64 go build main.go
SET CGO_ENABLED=0 SET GOOS=linux SET GOARCH=amd64 go build main.go
SET CGO_ENABLED=0
SET GOOS=linux
SET GOARCH=amd64
go build main.go

静态编译 zmq

CGO_CPPFLAGS="-I/usr/include" \
CGO_LDFLAGS="-L/usr/lib -L/usr/lib/z86_64-linux-gnu -lzmq -lpthread -lsodium -lrt -lstdc++ -lm -lc -lgcc" \
go get --ldflags '-extldflags "-static"' -a myapp/usingzmq4