golang編譯源代碼和交叉編譯方法
編譯源代碼
golang編譯其實很簡單,下載一份最新的源代碼后,進入src目錄運行all.bash即可,
但是你可能會遇到下面問題,這是因為現在golang都是用go語言編譯的了,所以你的系統必須先安裝好 >= go1.4 的版本.
./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
1、先上github上下載一份源代碼https://github.com/golang/go
然后進入目錄,查看全部分支。
可以看到當前最新的release分支是go1.12.
2、切換到go1.4的分支
3、進入source目錄,運行腳本開始編譯
~/open_src/go/src$ ./all.bash
4、之后可以進bin目錄運行go查看版本 是不是1.4,來確認是否編譯成功。
- sudo cp go /usr/local/go1.4 -rp 拷貝一份到本地路徑
這樣我們就可以使用go1.4編譯go1.12了。
編譯go1.12
1、回到go源碼目錄我們切換到go1.12分支.
現在就直接進入src編譯是不行的,我們需要先設置go1.4的路徑給GOROOT_BOOTSTRAP。
./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
2、再次進入src目錄編譯
你可能會遇到 _Gidle redeclared in this block
錯誤
這是因為我們的上次編譯的中間文件沒有清理的原因.
git clean -df
3、最后編譯應該就沒問題了,
交叉編譯
go的交叉編譯也比較簡便,go env
可以看到當前的環境變量配置,
GOOS、 GOARCH
分別表示目標機系統及處理器體系結構.
GOOS=linux GOARCH=amd64 go build hello.go
這些應該是可選搭配 :