[TOC]
說(shuō)明
注意:本文交叉編譯需要 1.5 以上
簡(jiǎn)單演示 Golang macOS 下編譯 windows 64位程序
? ~CGO_ENABLED=0 GOOS=windows GOARCH=amd64 go build -o test_win_x64.exe test.go
簡(jiǎn)單演示 Golang macOS 下編譯 Linux 64位程序
? ~CGO_ENABLED=0 GOOS=linux GOARCH=amd64 go build -o test_linux_x64 test.go
交叉編譯執(zhí)行程序
# 如果你想在Windows 32位系統(tǒng)下運(yùn)行
? ~CGO_ENABLED=0 GOOS=windows GOARCH=386 go build test.go
# 如果你想在Windows 64位系統(tǒng)下運(yùn)行
? ~CGO_ENABLED=0 GOOS=windows GOARCH=amd64 go build test.go
# 如果你想在OS X 32位系統(tǒng)下運(yùn)行
? ~CGO_ENABLED=0 GOOS=darwin GOARCH=386 go build test.go
# 如果你想在OS X 64位系統(tǒng)下運(yùn)行
? ~CGO_ENABLED=0 GOOS=darwin GOARCH=amd64 go build test.go
# 如果你想在Linux 32位系統(tǒng)下運(yùn)行
? ~CGO_ENABLED=0 GOOS=linux GOARCH=386 go build test.go
# 如果你想在Linux 64位系統(tǒng)下運(yùn)行
? ~CGO_ENABLED=0 GOOS=linux GOARCH=amd64 go build test.go
- CGO_ENABLED = 0 表示設(shè)置CGO工具不可用
- GOOS 程序構(gòu)建環(huán)境的目標(biāo)操作系統(tǒng)
- GOARCH 表示程序構(gòu)建環(huán)境的目標(biāo)計(jì)算架構(gòu)
編譯支持設(shè)置范例
GOOS=windows go build -v
GOOS=linux go build -v
GOOS=darwin go build -v
golang 交叉編譯支持
查詢當(dāng)前的交叉編譯支持,執(zhí)行命令
? go tool dist list
golang SDK編譯
預(yù)備交叉編譯環(huán)境
因?yàn)間o在1.5以后使用了golang 1.4 來(lái)編譯自己(自舉)贤牛,所以需要先下載golang1.4
linux 準(zhǔn)備
https://dl.google.com/go/go1.4.3.linux-amd64.tar.gz
設(shè)置環(huán)境變量 GOROOT_BOOTSTRAP
解壓到
tar zxvf go1.4.3.linux-amd64.tar.gz
cp go/ $home/go-bootstrap/
GOROOT_BOOTSTRAP=$home/go-bootstrap/
export GOROOT_BOOTSTRAP
Mac 準(zhǔn)備
https://dl.google.com/go/go1.4.3.darwin-amd64.pkg
設(shè)置環(huán)境變量 GOROOT_BOOTSTRAP
解壓到
tar zxvf go1.4.3.darwin-amd64.tar.gz
cp go/ $home/go-bootstrap/
GOROOT_BOOTSTRAP=$home/go-bootstrap/
export GOROOT_BOOTSTRAP
Windows 準(zhǔn)備
下載
http://tdm-gcc.tdragon.net/download
需要下載 32 和 64 安裝 TDM-GCC 32位 64位 并設(shè)置 path
下載
https://dl.google.com/go/go1.4.3.windows-amd64.zip
解壓后
設(shè)置環(huán)境變量 GOROOT_BOOTSTRAP
到解壓目錄(禁止任何中文舰褪,編碼問(wèn)題)
進(jìn)入需要配置交叉編譯的目錄,執(zhí)行
cd %GOROOT%/src
set CGO_ENABLED=0 | set GOOS=linux | set GOARCH=amd64 | make.bat
golang SDK 跨平臺(tái)交叉編譯
- 需要 進(jìn)入
$GOROOT/go/src
源碼所在目錄執(zhí)行 - 需要 golang 1.4.x 的環(huán)境
# 如果你想在Windows 32位系統(tǒng)下運(yùn)行
? ~cd $GOROOT/src
? ~CGO_ENABLED=0 GOOS=windows GOARCH=386 ./make.bash
# 如果你想在Windows 64位系統(tǒng)下運(yùn)行
? ~cd $GOROOT/src
? ~CGO_ENABLED=0 GOOS=windows GOARCH=amd64 ./make.
# 如果你想在OS X 32位系統(tǒng)下運(yùn)行
? ~cd $GOROOT/src
? ~CGO_ENABLED=0 GOOS=darwin GOARCH=386 ./make.bash
# 如果你想在OS X 64位系統(tǒng)下運(yùn)行
? ~cd $GOROOT/src
? ~CGO_ENABLED=0 GOOS=darwin GOARCH=amd64 ./make.bash
# 如果你想在Linux 32位系統(tǒng)下運(yùn)行
? ~cd $GOROOT/src
? ~CGO_ENABLED=0 GOOS=linux GOARCH=386 ./make.bash
# 如果你想在Linux 64位系統(tǒng)下運(yùn)行
? ~cd $GOROOT/src
? ~CGO_ENABLED=0 GOOS=linux GOARCH=amd64 ./make.bash
執(zhí)行結(jié)束后竞川,才可以使用交叉編譯
并不是重新編譯Go,因?yàn)榘惭bGo的時(shí)候叁熔,只是編譯了本地系統(tǒng)需要的東西委乌,而需要跨平臺(tái)交叉編譯,需要在Go中增加對(duì)其他平臺(tái)的支持荣回,所以會(huì)有
./make.bash
這么一個(gè)過(guò)程
Error Set $GOROOT_BOOTSTRAP
##### Building Go bootstrap tool.
cmd/dist
ERROR: Cannot find /Users/xxx/go1.4/bin/go.
Set $GOROOT_BOOTSTRAP to a working Go tree >= Go 1.4.