1. 程式人生 > >Go語言程式開發之ARM開發環境搭建

Go語言程式開發之ARM開發環境搭建

參考文件

開發環境介紹

  • 主機作業系統:Ubuntu14.04 64位
  • 目標平臺:IMX.6
  • 交叉工具鏈:arm-poky-linux-gnueabi,gcc4.8.2
  • Go版本:1.10.3
  • 編譯時間:2018.8.27

編譯Go編譯器(Host)

因為從Go1.4之後Go語言的編譯器完全由Go語言編寫,所以為了從原始碼編譯Go需要先編譯一個1.4版本的Go版本。為了方便國內下載可以提供一個Go1.4工具鏈原始碼地址地址

下載完成之後將得到一個go1.4-bootstrap-20171003.tar.gz壓縮包,接下來進行解壓編譯:

tar -zxvf go1.4-bootstrap-20171003
.tar.gz -C /usr/local/ cd /usr/local/go/src GOOS=linux GOARCH=amd64 ./make.bash

經過短時間的編譯之後將會在go/bin目錄下生成go命令二進位制檔案

設定環境變數

/etc/bash.bashrc檔案中新增如下內容(重啟命令列後生效)):

export GOROOT_BOOTSTRAP=/usr/local/go
export CC_FOR_TARGET=/opt/zhaozhongxiang/hwzt_yc_3.10.53/build-x11/tmp/sysroots/x86_64-linux/usr/bin/cortexa9hf-vfp-neon-poky-linux-gnueabi/arm-poky-linux-gnueabi-gcc    
export
CXX_FOR_TARGET=/opt/zhaozhongxiang/hwzt_yc_3.10.53/build-x11/tmp/sysroots/x86_64-linux/usr/bin/cortexa9hf-vfp-neon-poky-linux-gnueabi/arm-poky-linux-gnueabi-g++

編譯Go(ARM)

完成Go1.4的編譯之後,可以利用Go1.4來編譯新版本的Go,這裡提供Go原始碼下載地址

tar -zxvf go-go1.10.3.tar.gz
cd go-go1.10.3/src
# 開啟CGO編譯
CGO_ENABLED=1 GOOS=linux GOARCH=arm GOARM=7
./make.bash # 關閉CGO編譯 CGO_ENABLED=0 GOOS=linux GOARCH=arm GOARM=7 ./make.bash

提示:當選擇開啟CGO編譯時必須配置CC_FOR_TARGETCXX_FOR_TARGET兩個環境變數

經過編譯之後go-go1.10.3目錄下會生成arm和amd64兩個平臺的Go命令和依賴包,所以這個版本編譯的Go命令可以進行兩個平臺的Go應用程式開發。

使用新編譯的Go1.10版本替換舊的Go1.4

cd go-go1.10.3/src
cd ../../
mv go-go1.10.3 go
rm /usr/local/go -rf
cp -r go /usr/local/go

設定環境變數

/etc/bash.bashrc檔案中新增如下內容(重啟命令列後生效)):

export GOROOT_BOOTSTRAP=/usr/local/go
# 為了可以編譯CGO的Go應用程式(ARM版本)必須要保留下面的兩個環境變數
export CC_FOR_TARGET=/opt/zhaozhongxiang/hwzt_yc_3.10.53/build-x11/tmp/sysroots/x86_64-linux/usr/bin/cortexa9hf-vfp-neon-poky-linux-gnueabi/arm-poky-linux-gnueabi-gcc    
export CXX_FOR_TARGET=/opt/zhaozhongxiang/hwzt_yc_3.10.53/build-x11/tmp/sysroots/x86_64-linux/usr/bin/cortexa9hf-vfp-neon-poky-linux-gnueabi/arm-poky-linux-gnueabi-g++
export GOROOT=/usr/local/go
export GOPATH=/usr/local/gopath
export PATH=$PATH:$GOROOT/bin:$GOPATH/bin

驗證Go版本

go version
# 正常情況會輸出如下內容
go version go1.10.3 linux/amd64

編譯Helloworld程式

新建helloworld.go

package main

import "fmt"

func main() {
    fmt.Println("Hello world")
}

編譯ARM版本應用程式

GOOS=linux GOARCH=arm GOARM=7 go build helloworld.go

編譯完成之後在當前目錄下會生成helloworld,將此檔案上傳到ARM目標檔案系統上執行測試