1. 程式人生 > >編譯安裝golang1.7及golang程式的交叉編譯

編譯安裝golang1.7及golang程式的交叉編譯

  鑑於ubuntu上的apt-get方式安裝的golang是1.2.1,版本過於老舊,最新版本的golang需要自己動手。最簡單的方式是下載編譯好的包,例如對於64位的ubuntu來說,下載go1.7.1.linux-amd64.tar.gz,解壓到/usr/local,然後在bash中把 /usr/local/go/bin加入到PATH,整個過程就結束了。
  
  如果想要用原始碼編譯安裝的話就會稍稍複雜一點,然而也並沒有那麼複雜,例如這篇 《Install Go1.6 from Source on CentOS 7 in China》(在中國網路環境下從原始碼安裝Go1.6到CentOS 7)就過於複雜,需要先把github上golang帶版本控制資訊的原始碼下載先來,切換到1.4.x的分支,編譯1.4.x然後在切換到1.6(實際現在也可以切換到1.7),用go1.4.x編譯go1.6或者更高版本。

  這裡想要介紹的,是更為簡介的方案(文末附官方下載地址)。

原始碼編譯步驟如下:

0.更新ubuntu

sudo apt-get update && sudo apt-get upgrate -y

  如果進度卡在 flasgPlugin-installer,用ctrl+c結束,再執行一次即可。
  

1.下載並編譯go1.4.x

  下載go1.4.x的原始碼,解壓到當前使用者目錄例如 /home/zhangsan,並命名為go1.4,進入到src目錄(完整的路徑為 /home/zhangsan/go/src),在shell中執行./all.bash,螢幕滾動編譯資訊,最後以

Installed Go for linux/amd64 in /zhangsan/you/go
Installed commands in /home/zhangsan/go/bin

的提示資訊結束了編譯過程。這個時候go1.4.x已經編譯好了。
  

2.下載並編譯go1.7

  下載go1.7的原始碼,解壓到當前使用者目錄,解壓完後完整的路徑為/home/zhangsan/go,如果考慮到其他賬戶使用的話,也可以解壓到/usr/local,這樣完整的路徑就會是/usr/local/go。進入到 xx/go/src目錄,在shell中執行./all.bash(如果是在/usr/local下則執行./all.bash並輸入密碼),你會在螢幕的滾動資訊上看到go1.4.x在編譯go1.7,最後的提示資訊,如果在使用者目錄的go中編譯,則會是:

Installed Go for linux/amd64 in /home/zhangsan/go
Installed commands in /home/zhangsan/go/bin

如果是/usr/local目錄的go中編譯,則會是:

Installed Go for linux/amd64 in /usr/local/you/go
Installed commands in /usr/local/go/bin

這個時候go1.7就已經編譯完成了,go1.4.x可以刪掉了。
  

3.設定環境變數

  將xx/go/bin加入PATH。如果是在使用者目錄編譯,在命令列執行

echo 'PATH=$PATH:/home/zhangsan/go/bin' >> ~/.bashrc

如果是在/usr/local目錄的go中編譯,在命令列執行

echo 'PATH=$PATH:/usr/local/go/bin' >> ~/.bashrc

  將工作程式碼路徑設定為GOPATH。假設工作程式碼存放路徑為 /home/zhangsan/workCode/src/hello/hello.go, /home/zhangsan/workCode/src/foobar/foobar.go 等, 則設定GOPATH為 /home/zhangsan/workCode,在命令列執行

echo 'GOPATH=$HOME/workCode' >> ~/.bashrc

即可。至此go1.7已經安裝配置完成,執行go version和go env看看能不能正確輸出相關資訊。
  

交叉編譯

  從go1.5開始,將原始碼編譯成非本地系統的程式,不再需要先生成目的系統的編譯工具了,直接加引數編譯即可,例如在64位ubuntu上想要編譯64位windows的程式,在原始碼路徑下執行

GOOS=windows GOARCH=amd64 go build

就結束了(其中GOARCH=amd64可以省略)。當然如果是32位windows,則由於目的系統和本地系統架構不一致需要顯示指明,命令變為

GOOS=windows GOARCH=386 go build