GO語言中g(shù)ox交叉編譯的實(shí)現(xiàn)
最近在工作中使用GO語言進(jìn)行編碼開發(fā),因?yàn)轫?xiàng)目中的環(huán)境時arm64,所以總是需要交叉建議,在arm下才能正確運(yùn)行,GO語言還是非常強(qiáng)大的,在windows下就可以交叉編譯各個環(huán)境的二進(jìn)制文件,Gox是Go交叉編譯的一種簡單,簡潔的工具,其行為類似go build。
一、安裝
要安裝Gox,請使用go get。我們標(biāo)記版本,因此可以隨時簽出該標(biāo)記并進(jìn)行編譯。安裝成功后會生成gox命令行,使用gox --help
go get github.com/mitchellh/gox
二、使用
使用命令gox --osarch-list可以查看默認(rèn)的編譯環(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)境進(jìn)行編譯,則可以使用參數(shù)--osarch
gox --osarch="linux/arm64"
或者,只編譯linux環(huán)境的二進(jìn)制文件
gox -os="linux"
三、遇到的問題
1、開啟CGO
在使用過程中,因?yàn)楣こ讨邪?span>C語言的庫文件,因此在編譯的時候需要開啟CGO,CGO可以通過GO的環(huán)境變量設(shè)置。
go env -w CGO_ENABLED=1
在設(shè)置完成后,執(zhí)行g(shù)ox報(bào)錯了,但是具體看不出來是什么問題,于是我使用了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命令工具實(shí)現(xiàn)交叉編譯,于是我修改了環(huán)境變量:GOOS=linux、GOARCH=arm64。
還有上步設(shè)置的開啟CGO,CGO_ENABLED,共三個環(huán)境變量。
于是問題出現(xiàn)了!??!
在其他go的工程中,三個環(huán)境變量也生效了,導(dǎo)致我點(diǎn)擊調(diào)試按鈕時,提示如下:
API server listening at: [::]:58306 could not launch process: not an executable file 調(diào)試器完成,并顯示退出代碼 1
剛開始并不知道是什么原因,沒有生成可執(zhí)行的文件。但是使用go build還是可以生成,仔細(xì)一想,原來在其它工程中設(shè)置的環(huán)境變量生效了,導(dǎo)致生成了linux環(huán)境下的可執(zhí)行文件,所以這里才會提示沒有可執(zhí)行文件。將環(huán)境變量改回去即可正常開啟調(diào)試?。。?/p>
到此這篇關(guān)于GO語言中g(shù)ox交叉編譯的實(shí)現(xiàn)的文章就介紹到這了,更多相關(guān)GO gox交叉編譯內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
golang中defer延遲機(jī)制的實(shí)現(xiàn)示例
本文講解了golang特殊的defer延遲機(jī)制,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2025-09-09
使用Go語言實(shí)現(xiàn)跨域資源共享(CORS)設(shè)置
在Web開發(fā)中,跨域資源共享(CORS)是一種重要的安全機(jī)制,它允許許多資源在一個網(wǎng)頁上被另一個來源的網(wǎng)頁所訪問,然而,出于安全考慮,瀏覽器默認(rèn)禁止這種跨域訪問,為了解決這個問題,我們可以使用Go語言來設(shè)置CORS,需要的朋友可以參考下2024-06-06
golang字符串拼接實(shí)現(xiàn)方式和區(qū)別對比
本文介紹了Go語言中字符串拼接的多種方法及其優(yōu)缺點(diǎn),推薦使用strings.Builder進(jìn)行頻繁拼接以優(yōu)化內(nèi)存分配和性能,同時,還討論了通過sync.Pool優(yōu)化高頻創(chuàng)建的對象,以減少垃圾回收壓力,感興趣的朋友一起看看吧2025-02-02
golang 實(shí)現(xiàn)對Map進(jìn)行鍵值自定義排序
這篇文章主要介紹了golang 實(shí)現(xiàn)對Map進(jìn)行鍵值自定義排序,具有很好的參考價(jià)值,希望對大家有所幫助。一起跟隨小編過來看看吧2021-04-04
如何使用工具自動監(jiān)測SSL證書有效期并發(fā)送提醒郵件
本文介紹了如何開發(fā)一個工具,用于每日檢測SSL證書剩余有效天數(shù)并通過郵件發(fā)送提醒,工具基于命令行,通過SMTP協(xié)議發(fā)送郵件,需配置SMTP連接信息,本文還提供了配置文件樣例及代碼實(shí)現(xiàn),幫助用戶輕松部署和使用該工具2024-10-10
Golang使用WebSocket通信的實(shí)現(xiàn)
這篇文章主要介紹了Golang使用WebSocket通信的實(shí)現(xiàn),文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2021-02-02

