Golang语言移植-ARM开发环境搭建
开发环境介绍
- 主机操作系统:Ubuntu14.04 64位
- 目标平台:IMX.6Q ARM Cortex-A9内核
- 交叉工具链:arm-poky-linux-gnueabi,gcc4.9.1
- Go版本:go1.13
- 编译时间:2019.10.26
主机系统安装Go1.4
先下载go1.4的源码。因为go1.4版本之后的go语言版本编译器都是使用go语言编写的,使用go语言编译go,go1.4是最后一个使用gcc来编译的版本。所以为了从源代码编译Go需要先编译一个1.4版本的Go版本。
下载go1.4-bootstrap链接:mirrors.nju.edu.cn/golang/go1.4-bootstrap-20171003.tar.gz
下载完成之后将得到一个go1.4-bootstrap-20171003.tar.gz压缩包,接下来进行解压编译安装:
xxx@ubuntu:~$ export GO_INSTALL_PATH=/usr/local
xxx@ubuntu:~$ sudo tar -zxvf go1.4-bootstrap-20171003.tar.gz -C $GO_INSTALL_PATH
xxx@ubuntu:~$ cd $GO_INSTALL_PATH/go/src
xxx@ubuntu:/usr/local/go/src$ sudo GOOS=linux GOARCH=amd64 ./make.bash
编译之后将会在$GO_INSTALL_PATH/go/bin目录下生成go命令二进制文件。查看go的版本
xxx@ubuntu:~$ $GO_INSTALL_PATH/go/bin/go version
go version go1.14 linux/amd64
编译目标平台Go(ARM)
完成Go1.4的编译之后,可以利用Go1.4来编译新版本的Go,这里提供Go源代码下载地址
下载地址:mirrors.nju.edu.cn/golang/go1.13rc2.src.tar.gz
解压源码:
# 设置编译目录
xxx@ubuntu:~$ export GO_BUILD=~/go_build
# 创建编译目录
xxx@ubuntu:~$ mkdir $GO_BUILD
# 解压源码到编译目录
xxx@ubuntu:~$ tar -xvf go1.13rc2.src.tar.gz -C $GO_BUILD
# 进入源码目录
xxx@ubuntu:~$ cd $GO_BUILD/go/src
设置环境变量
编译相关环境变量说明:
参数 | 说明 |
GOROOT_FINAL | go语言根目录(可不设置) |
GOHOSTARCH | 主机编译器系统架构 |
GOARCH | 主机系统架构 |
GOOS | 主机操作系统 |
GO_GCFLAGS | 构建软件包和命令时go工具编译参数 |
GO_LDFLAGS | 构建命令时go工具编译参数 |
CC | 主机C编译器 |
CC_FOR_TARGET | 目标系统C编译器 |
CXX_FOR_TARGET | 目标系统C++编译器 |
PKG_CONFIG | pkg-config工具的路径 |
GOROOT_BOOTSTRAP | 安装目录 |
GOARM | 使用的浮点运算协处理器版本号,只对arm平台有用,可选值有5,6,7 |
GOOS GOARCH的可设置值:
GOOS | GOARCH |
darwin | 386 |
darwin | amd64 |
dragonfly | 386 |
dragonfly | amd64 |
freebsd | 386 |
freebsd | amd64 |
freebsd | arm |
linux | 386 |
linux | amd64 |
inux | arm |
netbsd | 386 |
netbsd | amd64 |
netbsd | arm |
openbsd | 386 |
openbsd | amd64 |
plan9 | 386 |
plan9 | amd64 |
solaris | amd64 |
windows | 386 |
windows | amd64 |
在$GO_BUILD/go/src创建arm_gcc.sh和arm_g++.sh文件:
hegaozhi@ubuntu:~/go_build/go/src$ cd $GO_BUILD/go/src
# 创建文件
hegaozhi@ubuntu:~/go_build/go/src$ touch arm_gcc.sh arm_g++.sh
在 arm_gcc.sh文件中写入对应C交叉编译器信息:
#!/bin/shexec /opt/poky/1.7/sysroots/x86_64-pokysdk-linux/usr/bin/arm-poky-linux-gnueabi/arm-poky-linux-gnueabi-gcc -march=armv7-a -mthumb-interwork -mfloat-abi=hard -mfpu=neon -mtune=cortex-a9 --sysroot=/opt/poky/1.7/sysroots/cortexa9hf-vfp-neon-poky-linux-gnueabi "$@"
在 arm_g++.sh文件中写入对应C++交叉编译器信息:
#!/bin/shexec /opt/poky/1.7/sysroots/x86_64-pokysdk-linux/usr/bin/arm-poky-linux-gnueabi/arm-poky-linux-gnueabi-g++ -march=armv7-a -mthumb-interwork -mfloat-abi=hard -mfpu=neon -mtune=cortex-a9 --sysroot=/opt/poky/1.7/sysroots/cortexa9hf-vfp-neon-poky-linux-gnueabi "$@"
在终端中输入以下内容设置环境变量:
# 个人交叉编译器信息,非必须
export SDKTARGETSYSROOT=/opt/poky/1.7/sysroots/cortexa9hf-vfp-neon-poky-linux-gnueabi
export PATH=/opt/poky/1.7/sysroots/x86_64-pokysdk-linux/usr/bin:/opt/poky/1.7/sysroots/x86_64-pokysdk-linux/usr/bin/arm-poky-linux-gnueabi:$PATH
export PKG_CONFIG_SYSROOT_DIR=$SDKTARGETSYSROOT
export PKG_CONFIG_PATH=$SDKTARGETSYSROOT/usr/lib/pkgconfig
export CONFIG_SITE=/opt/poky/1.7/site-config-cortexa9hf-vfp-neon-poky-linux-gnueabi
export OECORE_NATIVE_SYSROOT="/opt/poky/1.7/sysroots/x86_64-pokysdk-linux"
export OECORE_TARGET_SYSROOT="$SDKTARGETSYSROOT"
export OECORE_ACLOCAL_OPTS="-I /opt/poky/1.7/sysroots/x86_64-pokysdk-linux/usr/share/aclocal"
export PYTHONHOME=/opt/poky/1.7/sysroots/x86_64-pokysdk-linux/usr#1.4版本的安装路径
export GOROOT_BOOTSTRAP=$GO_INSTALL_PATH/go
# 目标平台C代码编译器信息
export CC_FOR_TARGET=$GO_BUILD/go/src/arm_gcc.sh
# 目标平台C++代码编译器信息
export CXX_FOR_TARGET=$GO_BUILD/go/src/arm_g++.sh
# 目标平台编译器参数,非必须
export GOGCCFLAGS='-march=armv7-a -mthumb-interwork -mfloat-abi=hard -mfpu=neon -mtune=cortex-a9 --sysroot=/opt/poky/1.7/sysroots/cortexa9hf-vfp-neon-poky-linux-gnueabi -O2 -pipe -g -feliminate-unused-debug-types -fPIC -m64 -fmessage-length=0'
编译:
hegaozhi@ubuntu:~/go_build/go/src$ CGO_ENABLED=1 GOOS=linux GOARCH=arm GOARM=7 ./make.bash
提示:当选择开启CGO编译时必须配置CC_FOR_TARGET和CXX_FOR_TARGET两个环境变量
经过编译之后$GO_BUILD/go目录下会生成arm和amd64两个平台的Go命令和依赖包,所以这个版本编译的Go命令可以进行两个平台的Go应用程序开发。
使用新编译的Go1.13版本替换旧的Go1.4:
cd $GO_BUILD
sudo rm $GO_INSTALL_PATH/go -rf
sudo cp -r go $GO_INSTALL_PATH/
设置运行环境变量
在/etc/bash.bashrc文件中添加如下内容(重启命令行后生效)):
export GOROOT_BOOTSTRAP=/usr/local/go
# 为了可以编译CGO的Go应用程序(ARM版本)必须要保留下面的两个环境变量
export CC_FOR_TARGET=$GOROOT_BOOTSTRAP/src/arm_gcc.sh
export CXX_FOR_TARGET=$GOROOT_BOOTSTRAP/src/arm_g++.sh
export GOROOT=/usr/local/go
export GOPATH=/usr/local/gopath
export PATH=$PATH:$GOROOT/bin:$GOPATH/bin
验证Go
# 查看版本
xxx@ubuntu:~$ go version
go version go1.10.3 linux/amd6# 查看参数
xxx@ubuntu:~$ go env
GOARCH="amd64"
GOBIN=""
GOCACHE="/home/hegaozhi/.cache/go-build"
GOEXE=""
GOHOSTARCH="amd64"
GOHOSTOS="linux"
GOOS="linux"
GOPATH="/usr/local/gopath"
GORACE=""
GOROOT="/usr/local/go"
GOTMPDIR=""
GOTOOLDIR="/usr/local/go/pkg/tool/linux_amd64"
GCCGO="gccgo"
CC="gcc"
CXX="g++"
CGO_ENABLED="1"
CGO_CFLAGS="-g -O2"
CGO_CPPFLAGS=""
CGO_CXXFLAGS="-g -O2"
CGO_FFLAGS="-g -O2"
CGO_LDFLAGS="-g -O2"
PKG_CONFIG="pkg-config"
GOGCCFLAGS="-fPIC -m64 -pthread -fmessage-length=0 -fdebug-prefix-map=/tmp/go-build791570790=/tmp/go-build -gno-record-gcc-switches"
编译Helloworld程序,新建helloworld.go文件,并填入如下内容
package mainimport "fmt"func main() {fmt.Println("Hello world")
}
编译ARM版本应用程序
xxx@ubuntu:~$ CGO_ENABLED=1 GOOS=linux GOARCH=arm GOARM=7 go build helloworld.go
编译完成之后在当前目录下会生成helloworld,将此文件上传到ARM目标文件系统上执行测试。
查看生成helloworld文件属性:
xxx@ubuntu:~/golang$ file helloworld
helloworld: ELF 32-bit LSB executable, ARM, EABI5 version 1 (SYSV), statically linked, not stripped
网络上golang调C例子
https://download.csdn.net/download/hgz_gs/12084628
Golang语言移植-ARM开发环境搭建相关推荐
- 我的全栈之路-C语言基础之C语言概述与开发环境搭建
我的全栈之路-C语言基础之C语言概述与开发环境搭建 我的全栈之路 1.1 信息技术发展趋势 1.2 浅谈计算机系统架构 1.2.1 计算机系统架构概述 1.2.2 计算机硬件系统 1.2.2 计算机软 ...
- linux上 arm开发环境搭建,详解 LINUX下QT For ARM开发环境搭建过程
LINUX下QT For ARM开发环境搭建过程是本文介绍的内容,不多说,先来看内容.在PC上,我们需要得到两个版本的Qt,分别是:Qt-4.5.2和QtEmbedded-4.5.2-arm.前者包括 ...
- 关于FS4412的ARM开发环境搭建并点亮LED灯
目录 一.ARM开发环境搭建 1.安装 GCC 编译工具 2.安装 Yagarto 工具包 3.安装FS-JTAG调试软件 4.安装JRE 5.安装FS-JTAG驱动 6.安装USB转串口驱动 7.安 ...
- 嵌入式LINUX搭建arm环境,手把手教你嵌入式ARM开发环境搭建
原标题:手把手教你嵌入式ARM开发环境搭建 1. 安装,配置,启动FTP服务 · 安装FTP: sudo apt-get install vsftpd · 修改vsftpd的配置文件/etc/vsft ...
- C语言核心技术-C语言概述与开发环境搭建
C语言概述 C语言发展简史 起源 1972年,贝尔实验室的Dennis Ritchie和Ken Thompson在开发Unix操作系统时设计了C语言,该操作系统的90%以上的代码都是由C语言实现,后期 ...
- c语言制表符_随时随地学习C语言之1—开发环境搭建
上一篇文章<C语言常用的集成开发环境有哪些?你用哪个?>介绍了C语言常用的集成开发环境,本文正式开始<随时随地学习C语言系列>连载文章.在这里面,我会把自己学习.使用C语言时的 ...
- 高云FPGA系列教程(1):FPGA和ARM开发环境搭建
文章目录 @[toc] 1. 获取安装包 2. 申请License 3. 安装高云FPGA开发环境 4. 安装高云MCU开发环境 5. 替换TangNano 4K专用下载软件 总结 本文是高云FPGA ...
- Linux下ARM开发环境搭建
本人的系统环境:Linux ubuntu 3.8.0-35-generic #50-Ubuntu SMP Tue Dec 3 01:25:33 UTC 2013 i686 i686 i686 GNU/ ...
- QT5.7.0 arm开发环境搭建
参考文章http://blog.csdn.net/singleroot/article/details/54344873 1.创建项目 创建一个c++项目,但是发现平台没有arm的平台,需要我们自己添 ...
- Python基础笔记_Day01_计算机基础知识和Python开发环境搭建
Day01_计算机基础知识和Python开发环境搭建 目录 01.01_计算机基础知识(计算机概述)(了解) 01.02_计算机基础知识(软件开发和计算机语言概述)(了解) 01.03_计算机基础知识 ...
最新文章
- 给力2011-东莞市南洋计算机软件有限公司 携手10大厂商提供企业安全有效节省成本解决方案...
- gin context和官方context_gin 源码阅读(一) -- 启动
- python变量存为matlab,详解如何在python中读写和存储matlab的数据文件(*.mat)
- python工程师是什么专业-猎维科技告诉你人工智能工程师与Python工程师有什么区别?...
- lightoj1060_组合数学
- 什么是透明传输 点对多传输? 它们有哪些经典应用和优势特点
- cocos2d-x3.6 连连看随机地图实现
- link标签 rel=“ alternate“ 应用解析
- 怎样找一张图片的原图、出处?最全搜图网站+具体案例分享
- 用matlab开环增益,自控原理实验仿真部份
- 计算机主机的组成的两部分,计算机的主机由哪两个部分组成
- 那些年常见的前端bug (持续更新)
- 为什么在wps中调整了0.5倍行距,某一页的行数不会发生变化?
- 使用VeraCrypt进行整盘加密介绍
- Redis源码-String:Redis String命令、Redis String存储原理、Redis String三种编码类型、Redis字符串SDS源码解析、Redis String应用场景
- 从c++到java+android
- 跨过顺丰的中通能终成霸主吗?
- 微型计算机怎么没声音,电脑没有声音是怎么回事 电脑失声怎么解决【解决方法】...
- 【机器学习】HMM模型
- win7 64位旗舰版下载 iso_天正CAD T20天正建筑V4.0(32/64位)下载地址:转发后及提取密码...
热门文章
- 施柏阁保时捷设计酒店全球陆续开设15家酒店;汉庭新品旗舰店在武汉街道口商圈亮相;开元酒店用国潮赋能中高端品牌 | 全球旅报...
- 【BZOJ4200】【NOI2015】小园丁与老司机(动态规划,网络流)
- CodeSonar网络研讨会
- 悠歌“即时”游戏回合文案
- Unity 艺术字体制作
- c语言中十六进制减法,二进制十进制十六进制
- 运算放大器介绍与应用电路(LM358)
- 双歧杆菌基因组序列批量下载、基因组注释、antiSMASH合成基因簇挖掘、核心基因的同源性比较。
- Day4:《卫报》:我们正面临着第六次大灭绝吗?
- 【docker】win10系统下docker容器安装及使用(二):docker通过commit及dockerfile进行创建