(1). GO嵌入式开发之 一 交叉编译

简介

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")
}

PC编译测试:

➜   go build test.go 
➜   ./test 
Hello world

ARM编译测试:

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

将编译好的test二进制文件放到开发板上验证;

参考链接:

我来评几句
登录后评论

已发表评论数()

相关站点

热门文章