简介
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二进制文件放到开发板上验证;
参考链接: