go如何進行交叉編譯

2021-10-23 20:38:12 字數 1309 閱讀 8773

2018-02-16

golang如何在乙個平台編譯另外乙個平台可以執行的檔案。比如在mac上編譯windows和linux可以執行的檔案。那麼我們的問題就設定成:如何在mac上編譯64位linux的可執行檔案。

golang的交叉編譯要保證golang版本在1.5以上,本解決方案例項**1.9版本執行的。

hello.go

123

4567

package main

import "fmt"

func main()

bash:

1

goos=linux goarch=amd64 go build hello.go

上面這段**直接在命令控制台裡面執行就可以生成64位linux的可執行程式。

這裡用到了兩個變數: - goos:目標作業系統 - goarch:目標作業系統的架構

osarch

os version

linux

386 / amd64 / arm

>= linux 2.6

darwin

386 / amd64

os x (snow leopard + lion)

freebsd

386 / amd64

>= freebsd 7

windows

386 / amd64

>= windows 2000

編譯其他平台的時候根據上面**引數執行編譯就可以了。

在網路上的諸多教程中可能會看到下面的編譯命令

1

cgo_enabled=0 goos=linux goarch=amd64 go build hello.go

其中cgo_enabled=0的意思是使用c語言版本的go編譯器,引數配置為0的時候就關閉c語言版本的編譯器了。自從golang1.5以後go就使用go語言編譯器進行編譯了。在golang1.9當中沒有使用cgo_enabled引數發現依然可以正常編譯。當然使用了也可以正常編譯。比如把cgo_enabled引數設定成1,即在編譯的過程當中使用cgo編譯器,我發現依然是可以正常編譯的。

實際上如果在go當中使用了c的庫,比如import "c"預設使用go build的時候就會啟動cgo編譯器,當然我們可以使用cgo_enabled=0來控制go build是否使用cgo編譯器。

go交叉編譯

指定叉編譯目標 goarch 目標平台 編譯後的目標平台 的處理器架構 386 amd64 arm goos 目標平台 編譯後的目標平台 的作業系統 darwin freebsd linux windows 一 windows 下編譯linux 64位可執行程式 set cgo enabled 0 ...

Go交叉編譯

使用go語言做了乙個微服務,微服務中的乙個功能,需要呼叫底層so。該微服務執行於arm64架構,系統為aarch64 gnu linux。因此需要交叉編譯。第一步 編寫編譯指令碼,指令碼中需要設定環境變數 go build v 第二步 調整gcc編譯環境。如下圖中5項,預設用於編譯和鏈結的工具。位於...

Go交叉編譯

golang的交叉編譯要保證golang版本在1.5以上,本解決方案例項 1.9版本執行的。goos linux goarch amd64 go build hello.go這裡用到了兩個變數 goos 目標作業系統 goarch 目標作業系統的架構 osarch os version linux ...