Go 交叉編譯

  • 6919
  • 0
  • go
  • 2021-04-22

紀錄一下,如何在windows底下交叉編譯別的環境的執行檔(使用powershell)。

go版本1.16

公司的工作環境很複雜,有人用mac 有人用windows。

有時候又有linux環境的要求...

簡單紀錄一下 cross compiler的指令吧

1. 選擇os及cpu架構,下面列出幾個我常用到的組合。

建立環境變數再編譯(記得要到專案資料夾底下再執行喔)

注意環境變數的設定,cmd 以及powershell使用的語法不同,下面範例使用的是powershell。

Ubuntu

> $env:goos="linux"; $env:goarch="amd64"; go build .

Pi3

> $env:goos="linux"; $env:goarch="arm"; go build .

Win10

> $env:goos="windows"; $env:goarch="amd64"; go build .

2.套餐(使用批次檔)

注意:批次檔吃的是cmd語法,下列範例採用cmd的語法。

編寫一個make.bat檔放到你的Go專案資料夾下並執行。

cd %~dp0
for %%I in (.) do set CurrDirName=%%~nxI
echo %CurrDirName%


set goos=linux
set goarch=amd64
go build -o %CurrDirName%_linux_x64 .


set goos=linux
set goarch=arm
go build -o %CurrDirName%_linux_arm .


set goos=darwin
set goarch=amd64
go build -o %CurrDirName%_mac .


set goos=windows
set goarch=amd64
go build -o %CurrDirName%.exe .

3. 可接受的編譯組合

輸入下列指令可以列出所使用版本的go(1.16.3),可編譯出來的組合列表。

> go tool dist list
aix/ppc64
android/386    
android/amd64  
android/arm    
android/arm64  
darwin/amd64   
darwin/arm64   
dragonfly/amd64
freebsd/386    
freebsd/amd64  
freebsd/arm    
freebsd/arm64  
illumos/amd64  
ios/amd64      
ios/arm64      
js/wasm        
linux/386      
linux/amd64    
linux/arm
linux/arm64
linux/mips
linux/mips64
linux/mips64le
linux/mipsle
linux/ppc64
linux/ppc64le
linux/riscv64
linux/s390x
netbsd/386
netbsd/amd64
netbsd/arm
netbsd/arm64
openbsd/386
openbsd/amd64
openbsd/arm
openbsd/arm64
openbsd/mips64
plan9/386
plan9/amd64
plan9/arm
solaris/amd64
windows/386
windows/amd64
windows/arm

 

參考來源:

https://golang.org/doc/install/source#environment