GO语言中gox交叉编译的实现
作者:蜡笔小新1849
最近在工作中使用GO语言进行编码开发,因为项目中的环境时arm64,所以总是需要交叉建议,在arm下才能正确运行,GO语言还是非常强大的,在windows下就可以交叉编译各个环境的二进制文件,Gox是Go交叉编译的一种简单,简洁的工具,其行为类似go build。
一、安装
要安装Gox,请使用go get。我们标记版本,因此可以随时签出该标记并进行编译。安装成功后会生成gox命令行,使用gox --help
go get github.com/mitchellh/gox
二、使用
使用命令gox --osarch-list可以查看默认的编译环境,如下为显示的部分内容。
gox --osarch-list Supported OS/Arch combinations for go1.17.4 are shown below. The "default" boolean means that if you don't specify an OS/Arch, it will be included by default. If it isn't a default OS/Arch, you must explicitly specify that OS/Arch combo for Gox to use it. darwin/386 (default: true) darwin/amd64 (default: true) linux/386 (default: true) linux/amd64 (default: true) linux/arm (default: true) freebsd/386 (default: true) freebsd/amd64 (default: true) openbsd/386 (default: true) openbsd/amd64 (default: true) windows/386 (default: true) windows/amd64 (default: true) freebsd/arm (default: true) netbsd/386 (default: true) netbsd/amd64 (default: true) netbsd/arm (default: true) plan9/386 (default: false) dragonfly/386 (default: false) dragonfly/amd64 (default: false) nacl/amd64 (default: false) nacl/amd64p32 (default: false)
如果想指定一个环境进行编译,则可以使用参数--osarch
gox --osarch="linux/arm64"
或者,只编译linux环境的二进制文件
gox -os="linux"
三、遇到的问题
1、开启CGO
在使用过程中,因为工程中包含C语言的库文件,因此在编译的时候需要开启CGO,CGO可以通过GO的环境变量设置。
go env -w CGO_ENABLED=1
在设置完成后,执行gox报错了,但是具体看不出来是什么问题,于是我使用了go build查看,具体执行如下:
go build -tags=unix # TrustZone/lib cgo: C compiler "gcc" not found: exec: "gcc": executable file not found in %PATH%
可以看出,我的电脑上没有安装gcc的编译工具。安装过程,此处就不再赘述了。
2、修改环境变量
此处修改GO语言的环境变量,我是想不通过GOX命令工具实现交叉编译,于是我修改了环境变量:GOOS=linux、GOARCH=arm64。
还有上步设置的开启CGO,CGO_ENABLED,共三个环境变量。
于是问题出现了!!!
在其他go的工程中,三个环境变量也生效了,导致我点击调试按钮时,提示如下:
API server listening at: [::]:58306 could not launch process: not an executable file 调试器完成,并显示退出代码 1
刚开始并不知道是什么原因,没有生成可执行的文件。但是使用go build还是可以生成,仔细一想,原来在其它工程中设置的环境变量生效了,导致生成了linux环境下的可执行文件,所以这里才会提示没有可执行文件。将环境变量改回去即可正常开启调试!!!
到此这篇关于GO语言中gox交叉编译的实现的文章就介绍到这了,更多相关GO gox交叉编译内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!
