参考文档
Go语言官方编译指南(需翻墙访问)开发环境介绍
主机操作系统:Ubuntu14.04 64位目标平台:IMX.6交叉工具链:arm-poky-linux-gnueabi,gcc4.8.2Go版本:1.10.3编译时间:.8.27编译Go编译器(Host)
因为从Go1.4之后Go语言的编译器完全由Go语言编写,所以为了从源代码编译Go需要先编译一个1.4版本的Go版本。为了方便国内下载可以提供一个Go1.4工具链源代码地址地址。
下载完成之后将得到一个go1.4-bootstrap-1003.tar.gz压缩包,接下来进行解压编译:
tar -zxvf go1.4-bootstrap-1003.tar.gz -C /usr/local/cd /usr/local/go/srcGOOS=linux GOARCH=amd64 ./make.bash
经过短时间的编译之后将会在go/bin
目录下生成go命令二进制文件
设置环境变量
在/etc/bash.bashrc
文件中添加如下内容(重启命令行后生效)):
export GOROOT_BOOTSTRAP=/usr/local/goexport CC_FOR_TARGET=/opt/zhaozhongxiang/hwzt_yc_3.10.53/build-x11/tmp/sysroots/x86_64-linux/usr/bin/cortexa9hf-vfp-neon-poky-linux-gnueabi/arm-poky-linux-gnueabi-gcc export CXX_FOR_TARGET=/opt/zhaozhongxiang/hwzt_yc_3.10.53/build-x11/tmp/sysroots/x86_64-linux/usr/bin/cortexa9hf-vfp-neon-poky-linux-gnueabi/arm-poky-linux-gnueabi-g++
编译Go(ARM)
完成Go1.4的编译之后,可以利用Go1.4来编译新版本的Go,这里提供Go源代码下载地址。
tar -zxvf go-go1.10.3.tar.gzcd go-go1.10.3/src# 开启CGO编译CGO_ENABLED=1 GOOS=linux GOARCH=arm GOARM=7 ./make.bash # 关闭CGO编译CGO_ENABLED=0 GOOS=linux GOARCH=arm GOARM=7 ./make.bash
提示:当选择开启CGO编译时必须配置
CC_FOR_TARGET
和CXX_FOR_TARGET
两个环境变量
经过编译之后go-go1.10.3
目录下会生成arm和amd64两个平台的Go命令和依赖包,所以这个版本编译的Go命令可以进行两个平台的Go应用程序开发。
使用新编译的Go1.10版本替换旧的Go1.4
cd go-go1.10.3/srccd ../../mv go-go1.10.3 gorm /usr/local/go -rfcp -r go /usr/local/go
设置环境变量
在/etc/bash.bashrc
文件中添加如下内容(重启命令行后生效)):
export GOROOT_BOOTSTRAP=/usr/local/go# 为了可以编译CGO的Go应用程序(ARM版本)必须要保留下面的两个环境变量export CC_FOR_TARGET=/opt/zhaozhongxiang/hwzt_yc_3.10.53/build-x11/tmp/sysroots/x86_64-linux/usr/bin/cortexa9hf-vfp-neon-poky-linux-gnueabi/arm-poky-linux-gnueabi-gcc export CXX_FOR_TARGET=/opt/zhaozhongxiang/hwzt_yc_3.10.53/build-x11/tmp/sysroots/x86_64-linux/usr/bin/cortexa9hf-vfp-neon-poky-linux-gnueabi/arm-poky-linux-gnueabi-g++export GOROOT=/usr/local/goexport GOPATH=/usr/local/gopathexport PATH=$PATH:$GOROOT/bin:$GOPATH/bin
验证Go版本
go version# 正常情况会输出如下内容go version go1.10.3 linux/amd64
编译Helloworld程序
新建helloworld.go
package mainimport "fmt"func main() {fmt.Println("Hello world")}
编译ARM版本应用程序
GOOS=linux GOARCH=arm GOARM=7 go build helloworld.go
编译完成之后在当前目录下会生成helloworld,将此文件上传到ARM目标文件系统上执行测试