2021-05-12 14:32:11
在ARM平台上編譯安裝Golang
Golang也就是Go語言,現在已經發行到1.4.1版本了,語言特性優越性和背後Google強大靠山什麼的就不多說了。Golang的官方提供了多個平台上的二進位制安裝包,遺憾的是並非沒有發布ARM平台的二進位制安裝包。ARM平台沒辦法直接從官網下載二進位制安裝包來安裝,好在Golang是支援多平台並且開源的語言,因此可以通過直接在ARM平台上編譯原始碼來安裝。整個過程主要包括編譯工具設定、獲取Golang原始碼、設定Golang編譯環境變數、編譯、設定Golang行環境變數等步驟。
註:本文選用樹莓派做測試,因為樹莓派是基於ARM平台的。
1、編譯工具設定
據說下個版本的golang編譯工具要使用golang自己來寫,但目前還是使用C編譯工具的。因此,首先要設定好C編譯工具:
1.1 在Ubuntu或Debian平台上可以使用sudo apt-get install gcc libc6-dev命令安裝,樹莓派的RaspBian系統是基於Debian修改的,所以可以使用這種方法安裝。
1.2 在RedHat或CentOS 6平台上可以使用sudo yum install gcc libc-devel命令安裝。
安裝完成後可以輸入 gcc --version命令驗證是否成功安裝。
2、獲取golang原始碼
2.1 直接從官網下載原始碼壓縮包。
golang官網提供golang的原始碼壓縮包,可以直接下載,最新的1.4.1版本原始碼連結:https://storage.googleapis.com/golang/go1.4.1.src.tar.gz
2.2 使用git工具獲取。
golang使用git版本管理工具,也可以使用git獲取golang原始碼。推薦使用這個方法,因為以後可以隨時獲取最新的golang原始碼。
2.2.1 首先確認ARM平台上已經安裝了git工具,可以使用git --version命令確認。一般linux平台都安裝了git,沒有的話可以自行安裝,不同平台的安裝方法可以參考:http://git-scm.com/download/linux
2.2.2 克隆遠端golang的git倉庫到本地
在終端cd到你想要安裝golang的目錄,確保該目錄下沒有名為go的目錄。然後以下命令獲取程式碼倉庫:
git clone https://go.googlesource.com/go
大陸地區可能會獲取失敗,在不翻牆的情況下我試了幾次都沒成功,原因大家都懂的。好在google已經將golang也託管到github上面,所以也可以通過下面命令獲取:
git clone https://github.com/golang/go.git
視網路情況,下載可能需要不少時間。我2M的頻寬花了將近兩個小時才下載完,雖然整個專案不過幾十兆= =
下載完成後,可以看到目錄下多了一個go目錄,裡面即為golang的原始碼,在終端上執行cd go命令進入該目錄。
執行下面命令檢出go1.4.1版本的原始碼,因為現在已經有新的程式碼提交上去了,最新的程式碼可能不是最穩定的:
git checkout go1.4.1
至此,最新1.4.1發行版的原始碼獲取完畢
3、設定golang的編譯環境變數
主要有GOROOT、GOOS、GOARCH、GOARM四個環境變數需要設定,先解釋四個環境變數的意義。
3.1 GOROOT
主要代表golang樹結構目錄的路徑,也就是上面git檢出的go目錄。一般可以不用設定這個環境變數,因為編譯的時候預設會以go目錄下src子目錄中的all.bash指令碼執行時的父目錄作為GOROOT的值。為了保險起見,可以直接設定為go目錄的路徑。
3.2 GOOS和GOARCH
分別代表編譯的目標系統和平台,可選值如下:
GOOS | GOARCH |
darwin | 386 |
darwin | amd64 |
dragonfly | 386 |
dragonfly | amd64 |
freebsd | 386 |
freebsd | amd64 |
freebsd | arm |
linux | 386 |
linux | amd64 |
linux | arm |
netbsd | 386 |
netbsd | amd64 |
netbsd | arm |
openbsd | 386 |
openbsd | amd64 |
plan9 | 386 |
plan9 | amd64 |
solaris | amd64 |
windows | 386 |
windows | amd64 |
需要注意的是這兩個值代表的是目標系統和平台,而不是編譯原始碼的系統和平台。樹莓派的RaspBian是linux系統,所以這些GOOS設定為linux,GOARCH設定為arm。
3.3 GOARM
表示使用的浮點運算協處理器版本號,只對arm平台有用,可選值有5,6,7。如果是在目標平台上編譯原始碼,這個值可以不設定,它會自動判斷需要使用哪一個版本。
總結下來,在樹莓派上設定golang的編譯環境變數,可編輯$HOME/.bashrc檔案,在末尾新增下面內容:
export GOROOT=你的go目錄路徑
export GOOS=linux
export GOARCH=arm
編輯完後儲存,執行source ~/.bashrc命令讓修改生效。
4、編譯原始碼
環境變數設定完成自後就可以開始編譯原始碼。在go目錄下的src子目錄中,主要有all.bash和make.bash兩個指令碼(另外還有兩個all.bat和make.bat指令碼適用於window平台)。編譯實際上就是執行其中一個指令碼,兩者的區別在於all.bash在編譯完成後還會執行一些測試套件。如果希望只編譯不測試,可以執行make.bash指令碼。使用cd命令進入go下src目錄,執行./all.bash或者./make.bash命令即可開始編譯。由於硬體情況不同,編譯耗費的時間不同。在我的B型樹莓派編譯過程花費了將近半個小時,編譯完成後執行的測試套件又花費了差不多一個小時,總共花費了一個半小時左右。
5、設定golang執行環境變數
編譯完成後,go目錄下會生成bin目錄,裡面就是go的執行指令碼。為了以後使用方法,可以將這個bin路徑新增到PATH環境變數中。同樣編輯~/.bashrc檔案,因為前面設定過GOROOT環境變數指向go目錄了,所以只需要在末尾加上
export PATH=$PATH:$GOROOT/bin
儲存後同樣執行source ~/.bashrc命令讓環境變數生效。
至此,golang原始碼編譯安裝成功。執行go version應該就能看到當前golang的版本資訊,表示編譯安裝成功。
另外還有一個比較重要的GOPATH環境變數需要設定,見http://www.linuxidc.com/Linux/2015-02/113676.htm。
參考官方文件:https://golang.org/doc/install/source
Linux系統入門學習-在Linux中安裝Go語言 http://www.linuxidc.com/Linux/2015-02/113159.htm
Ubuntu 安裝Go語言套件 http://www.linuxidc.com/Linux/2013-05/85171.htm
《Go語言程式設計》高清完整版電子書 http://www.linuxidc.com/Linux/2013-05/84709.htm
Go語言並行之美 -- 超越 “Hello World” http://www.linuxidc.com/Linux/2013-05/83697.htm
我為什麼喜歡Go語言 http://www.linuxidc.com/Linux/2013-05/84060.htm
Go語言記憶體分配器的實現 http://www.linuxidc.com/Linux/2014-01/94766.htm
相關文章