默认我们go build
的可执行文件都是当前操作系统可执行的文件,如果我想在windows下编译一个linux下可执行文件,那需要怎么做呢?
只需要指定目标操作系统的平台和处理器架构即可:
SET CGO_ENABLED=0 // 禁用CGO
SET GOOS=linux // 目标平台是linux
SET GOARCH=amd64 // 目标处理器架构是amd64
使用了cgo的代码是不支持跨平台编译的
然后再执行go build命令,得到的就是能够在Linux平台运行的可执行文件了。
Mac 下编译 Linux 和 Windows平台 64位 可执行程序:
CGO_ENABLED=0 GOOS=linux GOARCH=amd64 go build
CGO_ENABLED=0 GOOS=windows GOARCH=amd64 go build
Linux 下编译 Mac 和 Windows 平台64位可执行程序:
CGO_ENABLED=0 GOOS=darwin GOARCH=amd64 go build
CGO_ENABLED=0 GOOS=windows GOARCH=amd64 go build
Windows下编译Mac平台64位可执行程序:
SET CGO_ENABLED=0
SET GOOS=darwin
SET GOARCH=amd64
go build
1. 增加编译参数
Go
默认编译出来的文件都很大一个Hello world
几乎都有2M大小左右可以尝试一下编译方法,编译时加入参数
go build -ldflags="-w -s"
说明: 会去除 DWARF调试信息
、符号信息
-s
的作用是去掉符号信息。去掉符号表,golang panic 时 stack trace 就看不到文件名及出错行号信息了。
-w
的作用是去掉 DWARF tables 调试信息。结果就是得到的程序就不能用 gdb 调试了。
2. 使用压缩工具
安装 UPX
,并使用 最高级别的压缩
下载地址:https://github.com/upx/upx/releases
使用压缩命令
upx.exe -9 demo.exe