Go跨平臺編譯

golang中跨平臺交叉編譯涉及兩個重要的環境變量:GOOSGOARCH,分別表明 Target Host OSTarget Host ARCH. 若是沒有顯式設置這些環境變量,咱們經過go env能夠看到go編譯器眼中這兩個環境變量的當前值linux

GOARCH="amd64" // 程序構建環境的目標計算架構
GOBIN="/data/server/go/bin" // 存放可執行文件的目錄的絕對路徑
GOEXE="" // 可執行文件的後綴
GOHOSTARCH="amd64" // 程序運行環境的目標計算架構
GOHOSTOS="linux" // 程序運行環境的目標操做系統
GOOS="linux" // 程序構建環境的目標操做系統
GOPATH="/data/code" // 工做區目錄的絕對路徑
GORACE="" // 用於數據競爭檢測的相關選項
GOROOT="/data/server/go" // Go語言的安裝目錄的絕對路徑
GOTOOLDIR="/data/server/go/pkg/tool/linux_amd64" // Go工具目錄的絕對路徑
GCCGO="gccgo"
CC="gcc"
GOGCCFLAGS="-fPIC -m64 -pthread -fmessage-length=0 -fdebug-prefix-map=/tmp/go-build410649157=/tmp/go-build"
CXX="g++"
CGO_ENABLED="1" // 指明cgo工具是否可用的標識
CGO_CFLAGS="-g -O2"
CGO_CPPFLAGS=""
CGO_CXXFLAGS="-g -O2"
CGO_FFLAGS="-g -O2"
CGO_LDFLAGS="-g -O2"
PKG_CONFIG="pkg-config"
// linux 環境變量設置 /etc/profile
export GOROOT=/data/server/go
export GOPKG=$GOROOT/pkg/tool/linux_amd64 
export GOARCH=amd64
export GOOS=linux
export GOPATH=/data/code
export GOBIN=$GOROOT/bin:$GOPATH/bin
export PATH=$PATH:$GOBIN:$GOPKG:$GOPATH/bin

若是想要跨平臺編譯go程序,只需在build的時候制定目標主機的os和arch,以下例子所示所示golang

CGO_ENABLED=0 GOOS=windows GOARCH=amd64 go build main.go // win x64
CGO_ENABLED=0 GOOS=windows GOARCH=amd64 go build -o main main.go // win x64

CGO_ENABLED=0 GOOS=linux GOARCH=amd64 go build main.go // linux x64
CGO_ENABLED=0 GOOS=linux GOARCH=amd64 go build -o main main.go // linux x64

CGO_ENABLED=0 GOOS=darwin GOARCH=amd64 go build main.go // mac x64
CGO_ENABLED=0 GOOS=darwin GOARCH=amd64 go build -o main main.go // mac x64

其中兩者能夠設置以下參數:windows

$GOOS         $GOARCH     
darwin         386
darwin         amd64
freebsd     386
freebsd     amd64
linux         386
linux         amd64
linux         arm     incomplete
windows     386     incomplete

若是想要編譯其餘平臺的可執行腳本,秩序指定相應的os和arch便可。bash

go build命令的經常使用標記說明架構

-a        強行對全部涉及到的代碼包(包含標準庫中的代碼包)進行從新構建,即便它們已是最新的了。
-n        打印編譯期間所用到的其它命令,可是並不真正執行它們。
-p n    指定編譯過程當中執行各任務的並行數量(確切地說應該是併發數量)。在默認狀況下,該數量等於CPU的邏輯核數。可是在darwin/arm平臺(即iPhone和iPad所用的平臺)下,該數量默認是1。
-race    開啓競態條件的檢測。不過此標記目前僅在linux/amd6四、freebsd/amd6四、darwin/amd64和windows/amd64平臺下受到支持。
-v        打印出那些被編譯的代碼包的名字。
-work    打印出編譯時生成的臨時工做目錄的路徑,並在編譯結束時保留它。在默認狀況下,編譯結束時會刪除該目錄。
-x        打印編譯期間所用到的其它命令。注意它與-n標記的區別。

ps: http://wiki.jikexueyuan.com/p...併發

相關文章
相關標籤/搜索