簡介
? ? ? ? golang也就是go語言,語言特性優越性和背后google強大靠山什么的就不多說了。golang的官方提供了多個平臺上的二進制安裝包,遺憾的是并非沒有發布ARM平臺的二進制安裝包。ARM平臺沒辦法直接從官網下載二進制安裝包來安裝,好在golang是支持多平臺并且開源的語言,因此可以通過直接在ARM平臺上編譯源代碼來安裝。整個過程主要包括編譯工具配置、獲取golang源代碼、設置golang編譯環境變量、編譯、配置golang運行環境變量等步驟。
開發環境介紹
- 主機操作系統:Ubuntu14.04 64位
- 目標平臺:A40I (ARM Cortex-A7)
- 交叉工具鏈:arm-linux-gnueabi,gcc5.3.1
- 構建版本:vgo1.4/v1.13.4
- 編譯時間:2019.11.18
- 下載地址:https://studygolang.com/dl
編譯Go編譯器(Host)
? ? ? ? 自go1.4版本之后的go版本編譯器都是go寫的,用go自己編譯自己的,go1.4是最后一個用gcc來編譯的版本
Step1. 下載
下載地址:https://dl.google.com/go/go1.4-bootstrap-20171003.tar.gz。
Step2. 解壓
tar -zxvf go1.4-bootstrap-20171003.tar.gz
mv go go1.4
cd go1.4/src
Step3. 編譯安裝
GOOS=linux GOARCH=amd64 ./make.bash
編譯之后將會在go1.4/bin目錄下生成go命令二進制文件
Step4. 配置編譯器
export GOROOT_BOOTSTRAP=/work/platform/a40i/01lib/go1.4
編譯Go(ARM)
上面完成Go1.4的編譯之后,可以利用Go1.4來編譯新版本的Go
Step1. 下載
下載地址:[https://studygolang.com/dl)。go1.13.4.src.tar.gz
Step2. 解壓
tar -zxvf go1.13.4.src.tar.gz
mv go go1.13.4
cd go1.13.4/src
Step3. 配置
source ./env-cfg.sh
export CC_FOR_TARGET=arm-linux-gnueabi-gcc
export CXX_FOR_TARGET=arm-linux-gnueabi-g++
其中,
- source ./env-cfg.sh: 配置編譯器。
- CC_FOR_TARGET/CXX_FOR_TARGET:為了使編譯出來的最新的go支持arm,支持cgo;這兩個配置項也必須要配置。
Step4. 編譯
CGO_ENABLED=1 GOOS=linux GOARCH=arm GOARM=7 ./make.bash
- CGO_ENABLED=1: 開啟CGO編譯;最好開啟CGO_ENABLED,因為嵌入式涉及和C的相互調用。我這里也選擇了開啟。
當選擇開啟CGO編譯時必須配置CC_FOR_TARGET和CXX_FOR_TARGET兩個環境變量。
APP 測試驗證
Step1. 環境變量設置
export CC_FOR_TARGET=arm-linux-gnueabi-gcc
export CXX_FOR_TARGET=arm-linux-gnueabi-g++
export GOROOT=/work/platform/a40i/01lib/go1.13.4
export GOBIN=$GOROOT/bin
export GOPATH=/home/gopath
export PATH=$PATH:$GOBIN:GOPATH/bin
驗證下go版本:
? go go version
go version go1.13.4 linux/amd64
Step2. 測試hello world
vim test.go
package main
import "fmt"
func main() {
fmt.Println("Hello world")
}
代碼運行測試:
? go run test.go
Hello world
PC編譯測試:
? go build test.go
? ./test
Hello world
ARM編譯測試:
GOOS=linux GOARCH=arm GOARM=7 go build test.go
將編譯好的test二進制文件放到開發板上驗證;
參考鏈接: