Golang支持交叉編譯社露,也就是說你在32位平臺的機器上開發(fā),可以編譯生成64位平臺上的可執(zhí)行程序.mac 下可以編譯linux 下的執(zhí)行程序 又或者windows下的執(zhí)行程序
交叉編譯依賴下面幾個環(huán)境變量:
GOOS 目標平臺(編譯后的目標平臺)的操作系統(tǒng)(darwin附鸽、freebsd、linux瞒瘸、windows)
各平臺的GOOS和GOARCH參考
OS ARCH 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
跨平臺編譯步驟:
確定當前go環(huán)境的
mac 下的 GOARCH 和 GOOS
用go env 查看
? ~ go env
GOARCH="amd64"
GOBIN=""
GOEXE=""
GOHOSTARCH="amd64"
GOHOSTOS="darwin"
GOOS="darwin"
GOPATH="/Users/song/go"
GORACE=""
GOROOT="/usr/local/go"
GOTOOLDIR="/usr/local/go/pkg/tool/darwin_amd64"
CC="clang"
GOGCCFLAGS="-fPIC -m64 -pthread -fno-caret-diagnostics -Qunused-arguments -fmessage-length=0 -fdebug-prefix-map=/var/folders/v6/87fb06yx7yb46b79xlnj1y_m0000gn/T/go-build215820159=/tmp/go-build -gno-record-gcc-switches -fno-common"
CXX="clang++"
CGO_ENABLED="1"
首先確定當前編譯環(huán)境的處理器架構,Linux mac 都可以用uname -a 來查看
? ~ uname -a
Darwin localhost 16.3.0 Darwin Kernel Version 16.3.0: Thu Nov 17 20:23:58 PST 2016; root:xnu-3789.31.2~1/RELEASE_X86_64 x86_64
? ~
目標機 Linux 下 這個是跑在Docker下的鏡像
[root@74780b70d0c0 Desktop]# uname -a
Linux 74780b70d0c0 4.9.4-moby #1 SMP Wed Jan 18 17:04:43 UTC 2017 x86_64 x86_64 x86_64 GNU/Linux
[root@74780b70d0c0 Desktop]#
這里可以看到這個服務器的架構是 x86_64 這個架構亦稱 amd64.
● 6g是amd64的go編譯器坷备,它生成的是.6文件。
● 386一般使用8g命令情臭,它生成的一般是.8格式的文件省撑。
● 當然還有一個5g的命令是用于arm的cpu,
同理amd64用6l俯在,386用8l,arm用5l的鏈接器
明白了上面就開始交叉編譯go的可執(zhí)行程序了
編譯對應平臺下的執(zhí)行文件
到源代碼目錄下執(zhí)行:
Mac 下編譯 Linux 和 Windows 64位可執(zhí)行程序
CGO_ENABLED=0 GOOS=linux GOARCH=amd64 go build main.go
CGO_ENABLED=0 GOOS=windows GOARCH=amd64 go build main.go
Linux 下編譯 Mac 和 Windows 64位可執(zhí)行程序
CGO_ENABLED=0 GOOS=darwin GOARCH=amd64 go build main.go
CGO_ENABLED=0 GOOS=windows GOARCH=amd64 go build main.go
Windows 下編譯 Mac 和 Linux 64位可執(zhí)行程序
SET CGO_ENABLED=0
SET GOOS=darwin
SET GOARCH=amd64
go build main.go
SET CGO_ENABLED=0
SET GOOS=linux
SET GOARCH=amd64
go build main.go
不帶前面參數(shù)的 go build 只是編譯出開發(fā)環(huán)境適用的執(zhí)行文件竟秫。