参考文章:https://tech.wmzhe.com/article/97987.html
golang编译方式一般分为两种,一种是源码编译,另外一个是交叉编译
1.源码编译
这种方式需要在机器上安装相应的go sdk,可以参考环境部署相关的文章,这里不再叙述;只需要把项目代码copy到相应的机器上,在项目目录中,执行命令:go build ./main.go -o outdir,编译速度非常快,接着在outdir文件中即可看到编译后的二进制文件或exe文件
2.交叉编译
在编译到linux等其他目标平台前,需要在机器上安装MingGW c++编译环境。
更多信息请参考官网文档:https://github.com/golang/go/wiki#release-specific-information
GOOS:目标平台的操作系统(darwin、freebsd、linux、windows)
GOARCH:目标平台的体系架构(386、amd64、arm)
交叉编译不支持 CGO 所以要禁用它,如果要使用CGO,需要源码编译构建。
GOOS 和GOARCH的有效组合:
GOOS | GOARCH |
---|---|
aix | ppc64 |
android | 386 |
android | amd64 |
android | arm |
android | arm64 |
darwin | 386 |
darwin | amd64 |
darwin | arm |
darwin | arm64 |
dragonfly | amd64 |
freebsd | 386 |
freebsd | amd64 |
freebsd | arm |
illumos | amd64 |
js | wasm |
linux | 386 |
linux | amd64 |
linux | arm |
linux | arm64 |
linux | ppc64 |
linux | ppc64le |
linux | mips |
linux | mipsle |
linux | mips64 |
linux | mips64le |
linux | s390x |
netbsd | 386 |
netbsd | amd64 |
netbsd | arm |
openbsd | 386 |
openbsd | amd64 |
openbsd | arm |
openbsd | arm64 |
plan9 | 386 |
plan9 | amd64 |
plan9 | arm |
solaris | amd64 |
windows | 386 |
windows | amd64 |
2.1 Windows主机编译Linux,MAC客户端
Windows主机编译Windows客户端
SET CGO_ENABLED=0
SET GOOS=windows
SET GOARCH=amd64
go build -o abc-demo-windows.exe main.go
Windows主机编译LINUX客户端
SET CGO_ENABLED=0
SET GOOS=linux
SET GOARCH=amd64
go build -o abc-demo-linux main.go
Windows主机编译MAC客户端
SET CGO_ENABLED=0
SET GOOS=darwin
SET GOARCH=amd64
go build -o abc-demo-mac main.go
2.2 Linux主机编译Widows,MAC客户端
CGO_ENABLED=0 GOOS=linux GOARCH=amd64 go build -o abc-demo-linux main.go
CGO_ENABLED=0 GOOS=darwin GOARCH=amd64 go build -o adc-demo-mac main.go
CGO_ENABLED=0 GOOS=windows GOARCH=amd64 go build -o abc-demo-windows.exe main.go
2.3 MAC主机编译Widows,linux客户端
CGO_ENABLED=0 GOOS=linux GOARCH=amd64 go build -o abc-demo-linux main.go
CGO_ENABLED=0 GOOS=darwin GOARCH=amd64 go build -o abc-demo-mac main.go
CGO_ENABLED=0 GOOS=windows GOARCH=amd64 go build -o abc-demo-windows.exe main.go
以windows下编译linux amd64示例,直接编写bat脚本,然后双击执行
可看到成功的编译一个二进制文件hai,该文件可以直接在目标平台上以 ./hai &的方式运行起来。