golang编译源代码和交叉编译方法

编译源代码

golang编译其实很简单,下载一份最新的源代码后,进入src目录运行all.bash便可,
可是你可能会遇到下面问题,这是由于如今golang都是用go语言编译的了,因此你的系统必须先安装好 >= go1.4 的版本.git

./all.bash 
Building Go cmd/dist using /home/ailumiyana/go1.4.
ERROR: Cannot find /home/ailumiyana/go1.4/bin/go.
Set $GOROOT_BOOTSTRAP to a working Go tree >= Go 1.4.
ailumiyana@sola:~/open_src/go/src$ export GOROOT_BOOTSTRAP=/usr/local/go1.4

编译go1.4

一、先上github上下载一份源代码https://github.com/golang/gogithub

而后进入目录,查看所有分支。
能够看到当前最新的release分支是go1.12.
Alt textgolang

二、切换到go1.4的分支
Alt textbash

三、进入source目录,运行脚本开始编译ui

~/open_src/go/src$ ./all.bash

四、以后能够进bin目录运行go查看版本 是否是1.4,来确认是否编译成功。this

Alt text

  1. sudo cp go /usr/local/go1.4 -rp 拷贝一份到本地路径
    这样咱们就可使用go1.4编译go1.12了。

编译go1.12

一、回到go源码目录咱们切换到go1.12分支.
如今就直接进入src编译是不行的,咱们须要先设置go1.4的路径给GOROOT_BOOTSTRAP。code

./all.bash 
Building Go cmd/dist using /home/ailumiyana/go1.4.
ERROR: Cannot find /home/ailumiyana/go1.4/bin/go.
Set $GOROOT_BOOTSTRAP to a working Go tree >= Go 1.4.
ailumiyana@sola:~/open_src/go/src$ export GOROOT_BOOTSTRAP=/usr/local/go1.4
export GOROOT_BOOTSTRAP=/usr/local/go1.4
_Gidle redeclared in this block

这是由于咱们的上次编译的中间文件没有清理的缘由.
Alt text

git clean -df

Alt text

三、最后编译应该就没问题了,

Alt text

交叉编译

go envGOOS、 GOARCH
GOOS=linux GOARCH=amd64 go build hello.go

Alt text

这些应该是可选搭配 :
Alt text