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

· · 2731 次点击 · · 开始浏览    
这是一个创建于 的文章,其中的信息可能已经有所发展或是发生改变。

简介

        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二进制文件放到开发板上验证;



参考链接:

  1. https://blog.csdn.net/yyz_1987/article/details/86611750
  2. https://studygolang.com/articles/15054?fr=sidebar

有疑问加站长微信联系(非本文作者)

本文来自:简书

感谢作者:

查看原文:(1). GO嵌入式开发之 一 交叉编译

入群交流(和以上内容无关):加入Go大咖交流群,或添加微信:liuxiaoyan-s 备注:入群;或加QQ群:692541889

2731 次点击  
加入收藏 微博
2 回复  |  直到 2019-11-19 16:59:42
暂无回复
添加一条新回复 (您需要 登录 后才能回复 没有账号 ?)
  • 请尽量让自己的回复能够对别人有帮助
  • 支持 Markdown 格式, **粗体**、~~删除线~~、`单行代码`
  • 支持 @ 本站用户;支持表情(输入 : 提示),见 Emoji cheat sheet
  • 图片支持拖拽、截图粘贴等方式上传