GO語言中gox交叉編譯的實現(xiàn)
最近在工作中使用GO語言進行編碼開發(fā),因為項目中的環(huán)境時arm64,所以總是需要交叉建議,在arm下才能正確運行,GO語言還是非常強大的,在windows下就可以交叉編譯各個環(huán)境的二進制文件,Gox是Go交叉編譯的一種簡單,簡潔的工具,其行為類似go build。
一、安裝
要安裝Gox,請使用go get。我們標記版本,因此可以隨時簽出該標記并進行編譯。安裝成功后會生成gox命令行,使用gox --help
go get github.com/mitchellh/gox
二、使用
使用命令gox --osarch-list可以查看默認的編譯環(huán)境,如下為顯示的部分內(nèi)容。
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)
如果想指定一個環(huán)境進行編譯,則可以使用參數(shù)--osarch
gox --osarch="linux/arm64"
或者,只編譯linux環(huán)境的二進制文件
gox -os="linux"
三、遇到的問題
1、開啟CGO
在使用過程中,因為工程中包含C語言的庫文件,因此在編譯的時候需要開啟CGO,CGO可以通過GO的環(huán)境變量設置。
go env -w CGO_ENABLED=1
在設置完成后,執(zhí)行gox報錯了,但是具體看不出來是什么問題,于是我使用了go build查看,具體執(zhí)行如下:
go build -tags=unix # TrustZone/lib cgo: C compiler "gcc" not found: exec: "gcc": executable file not found in %PATH%
可以看出,我的電腦上沒有安裝gcc的編譯工具。安裝過程,此處就不再贅述了。
2、修改環(huán)境變量
此處修改GO語言的環(huán)境變量,我是想不通過GOX命令工具實現(xiàn)交叉編譯,于是我修改了環(huán)境變量:GOOS=linux、GOARCH=arm64。
還有上步設置的開啟CGO,CGO_ENABLED,共三個環(huán)境變量。
于是問題出現(xiàn)了!?。?/strong>
在其他go的工程中,三個環(huán)境變量也生效了,導致我點擊調(diào)試按鈕時,提示如下:
API server listening at: [::]:58306 could not launch process: not an executable file 調(diào)試器完成,并顯示退出代碼 1
剛開始并不知道是什么原因,沒有生成可執(zhí)行的文件。但是使用go build還是可以生成,仔細一想,原來在其它工程中設置的環(huán)境變量生效了,導致生成了linux環(huán)境下的可執(zhí)行文件,所以這里才會提示沒有可執(zhí)行文件。將環(huán)境變量改回去即可正常開啟調(diào)試?。?!
到此這篇關于GO語言中gox交叉編譯的實現(xiàn)的文章就介紹到這了,更多相關GO gox交叉編譯內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關文章希望大家以后多多支持腳本之家!
相關文章
詳解golang函數(shù)多返回值錯誤處理與error類型
這篇文章主要為大家詳細介紹了golang中函數(shù)多返回值錯誤處理與error類型的相關知識,文中的示例代碼簡潔易懂,感興趣的小伙伴快跟隨小編一起學習吧2023-10-10

