參考文檔
- Go語言官方編譯指南(需翻牆通路)
開發環境介紹
- 主機作業系統: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.-bootstrap-.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./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./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..tar.gz
cd go-go1./src
# 開啟CGO編譯
CGO_ENABLED= GOOS=linux GOARCH=arm GOARM= ./make.bash
# 關閉CGO編譯
CGO_ENABLED= GOOS=linux GOARCH=arm GOARM= ./make.bash
提示:當選擇開啟CGO編譯時必須配置和
CC_FOR_TARGET
兩個環境變量
CXX_FOR_TARGET
經過編譯之後
go-go1.10.3
目錄下會生成arm和amd64兩個平台的Go指令和依賴包,是以這個版本編譯的Go指令可以進行兩個平台的Go應用程式開發。
使用新編譯的Go1.10版本替換舊的Go1.4
cd go-go1./src
cd ../../
mv go-go1. 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./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./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. linux/amd64
編譯Helloworld程式
建立helloworld.go
package main
import "fmt"
func main() {
fmt.Println("Hello world")
}
編譯ARM版本應用程式
編譯完成之後在目前目錄下會生成helloworld,将此檔案上傳到ARM目标檔案系統上執行測試