其他分享
首页 > 其他分享> > Golang的交叉编译问题

Golang的交叉编译问题

作者:互联网

参考:Golang交叉编译各个平台的二进制文件 - Go语言中文网 - Golang中文社区 (studygolang.com)也谈Go的可移植性 | Tony Bai

今天准备将一个在Mac上开发的Golang项目部署到云服务器上进行部署上线,于是通过go build将项目编译成mac下的Unix可执行二进制文件上传到了CentOS云服务器准备运行,但此时报了一个错:

-bash: ./Technology-Learning-Community: cannot execute binary file

经过查询,导致这种情况的原因一般有两种:

所谓交叉编译,就是在一个平台上生成另一个平台的可执行程序,这也就是Golang能够实现可移植性的原因之一。我们在go build前设置编译的参数即可方便的生成其他平台的二进制文件:

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

# linux上编译mac和windows二进制
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二进制
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

其中用到的三个变量就是go env中的配置参数,我们可以通过go help environment查看参数的详细含义:

标签:amd64,CGO,交叉,Golang,编译,GOARCH,build,go
来源: https://blog.csdn.net/qq_45173404/article/details/122618080