记录点分享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
交叉编译须要指定要目标的系统和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来进行交叉编译.