分享
  1. 首页
  2. 文章

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

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

简介

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

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

用户登录

没有账号?注册
(追記) (追記ここまで)

今日阅读排行

    加载中
(追記) (追記ここまで)

一周阅读排行

    加载中

关注我

  • 扫码关注领全套学习资料 关注微信公众号
  • 加入 QQ 群:
    • 192706294(已满)
    • 731990104(已满)
    • 798786647(已满)
    • 729884609(已满)
    • 977810755(已满)
    • 815126783(已满)
    • 812540095(已满)
    • 1006366459(已满)
    • 692541889

  • 关注微信公众号
  • 加入微信群:liuxiaoyan-s,备注入群
  • 也欢迎加入知识星球 Go粉丝们(免费)

给该专栏投稿 写篇新文章

每篇文章有总共有 5 次投稿机会

收入到我管理的专栏 新建专栏