golang交叉編譯

記錄點分享http://gitos.org/2016/04/24/golang-cross-compiler/
linux

一 環境安裝

在蘋果系統上安裝golang環境很是簡單, 用brew直接git

brew install go

就能夠安裝好golang的開發環境.golang

若是沒有安裝brew, 則強烈建議安裝. 實在不想的, 那麼就下着mac版的golang, 在shell

~/.bash_profile

上加入bootstrap

export GOROOT=/your go path
export GOPATH=/your develop go path

要交差編譯, 必需要有對應平臺的golang編譯環境, 這裏的環境不是指系統環境, 是指編譯軟件環境.bash

能夠查看$GOROOT/pkg目錄,架構

SZCMAC:pkg shizhengchu$ ll
total 0
drwxr-xr-x   9 shizhengchu  admin   306  4 18 14:22 .
drwxr-xr-x  16 shizhengchu  admin   544  4 12 08:13 ..
drwxr-xr-x   5 shizhengchu  admin   170  4 18 14:22 bootstrap
drwxr-xr-x  58 shizhengchu  admin  1972  4 18 15:32 darwin_amd64
drwxr-xr-x  57 shizhengchu  admin  1938  4 12 08:13 darwin_amd64_race
drwxr-xr-x   5 shizhengchu  admin   170  4 12 08:13 include
drwxr-xr-x  58 shizhengchu  admin  1972  4 18 14:23 linux_amd64
drwxr-xr-x   3 shizhengchu  admin   102  4 18 14:22 obj
drwxr-xr-x   4 shizhengchu  admin   136  4 18 14:23 tool

個人是mac系統, 默認狀況下是沒有linux_amd64這個目錄的, (已經被我添加了編譯環境),因此若是在蘋果系統上想要編譯出linux amd64上的程序, 必須要生成對應的編譯環境.ui

二 生成linux amd64編譯環境

交叉編譯須要指定要目標的系統和cpu架構, 這裏個人目標系統是linux系統, cpu是amd64指令集. 因此在golang環境中,配置環境變量GOARCH指定cpu架構, GOOS指定操做系統.spa

咱們來查看一下當前golang的環境變量的配置:操作系統

SZCMAC:pkg shizhengchu$ go version
go version go1.6.1 darwin/amd64
SZCMAC:pkg shizhengchu$ go env
GOARCH="amd64"
GOBIN=""
GOEXE=""
GOHOSTARCH="amd64"
GOHOSTOS="darwin"
GOOS="darwin"
GOPATH="/Users/shizhengchu/Documents/devsrc/gospace"
GORACE=""
GOROOT="/usr/local/opt/go/libexec"
GOTOOLDIR="/usr/local/opt/go/libexec/pkg/tool/darwin_amd64"
GO15VENDOREXPERIMENT="1"
CC="clang"
GOGCCFLAGS="-fPIC -m64 -pthread -fno-caret-diagnostics -Qunused-arguments -fmessage-length=0 -fno-common"
CXX="clang++"
CGO_ENABLED="1"

 看出這是蘋果系統上的環境變量, 要編譯linux 上的須要設置

GOOS=linux GOARCH=amd64

咱們進入到golang的源碼目錄, 生成linux編譯環境

cd $GOROOT/src
CGO_ENABLED=0 GOOS=linux GOARCH=amd64 ./make.bash --no-clean

可是出錯了, 提示咱們GOROOT_BOOTSTRAP沒有設置. 這是爲何呢?

由於golang自1.4後, 就由golang來編譯golang了, 不使用GCC來編譯了.因此, 咱們要copy一份golang的開發環境到其它目錄, 我然指定這個目錄爲GOROOT_BOOTSTRAP, 使用GOROOT_BOOTSTRAP指定的目錄來編譯golang 的linux編譯環境.

而後再執行make.bash

cd $GOROOT
cd ..
cp -R libexec /Users/shizhengchu/go
export GOROOT_BOOTSTRAP=/Users/shizhengchu/go
cd $GOROOT/src
CGO_ENABLED=0 GOOS=linux GOARCH=amd64 ./make.bash —no-clean

現查看$GOROOT/pkg就能夠看到linux_amd64了.

三 交叉編譯

進入工程, 設置GOOS和GOARCH, 再進行編譯

GOOS=linux GOARCH=amd64 go build -o moxie main.go

這樣編譯出來的二進制程序已是linux amd64上的程序了.


由於咱們的環境變量都是在shell是設置, 關閉shell後不會影響系統的環境變量.爲了簡便, 避免每次編譯都要輸入一長串, 能夠創建一下make.linux_amd64文件, 寫入

GOOS=linux GOARCH=amd64 go build -o moxie main.go

這樣, 就能夠sh make.linux_amd64來進行交叉編譯.

相關文章
相關標籤/搜索