go build


原文链接: go build

本文由 简悦 SimpRead 转码, 原文地址 https://blog.csdn.net/sanallen/article/details/82118952

参考文档

  1. Go 语言官方编译指南 (需翻墙访问)


GOOS=linux GOARCH=arm GOARM=6 go build -v
GOARM=5: use software floating point; when CPU doesn’t have VFP co-processor
GOARM=6: use VFPv1 only; default if cross compiling; usually ARM11 or better cores (VFPv2 or better is also supported)
GOARM=7: use VFPv3; usually Cortex-A cores

开发环境介绍

  • 主机操作系统:Ubuntu14.04 64 位
  • 目标平台:IMX.6
  • 交叉工具链:arm-poky-linux-gnueabi,gcc4.8.2
  • Go 版本:1.10.3
  • 编译时间:2018.8.27

编译 Go 编译器 (Host)

因为从 Go1.4 之后 Go 语言的编译器完全由 Go 语言编写,所以为了从源代码编译 Go 需要先编译一个 1.4 版本的 Go 版本。为了方便国内下载可以提供一个 Go1.4 工具链源代码地址地址

下载完成之后将得到一个 go1.4-bootstrap-20171003.tar.gz 压缩包,接下来进行解压编译:
tar -zxvf go1.4-bootstrap-20171003.tar.gz -C /usr/local/
cd /usr/local/go/src
GOOS=linux GOARCH=amd64 ./make.bash

经过短时间的编译之后将会在go/bin目录下生成 go 命令二进制文件

设置环境变量

/etc/bash.bashrc文件中添加如下内容 (重启命令行后生效)):

export GOROOT_BOOTSTRAP=/usr/local/go
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++

编译 Go(ARM)

完成 Go1.4 的编译之后,可以利用 Go1.4 来编译新版本的 Go,这里提供 Go 源代码下载地址

tar -zxvf go-go1.10.3.tar.gz
cd 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_TARGETCXX_FOR_TARGET两个环境变量

经过编译之后go-go1.10.3目录下会生成 arm 和 amd64 两个平台的 Go 命令和依赖包,所以这个版本编译的 Go 命令可以进行两个平台的 Go 应用程序开发。

使用新编译的 Go1.10 版本替换旧的 Go1.4

cd go-go1.10.3/src
cd ../../
mv go-go1.10.3 go
rm /usr/local/go -rf
cp -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/go
export GOPATH=/usr/local/gopath
export PATH=$PATH:$GOROOT/bin:$GOPATH/bin

验证 Go 版本

go version

正常情况会输出如下内容

go version go1.10.3 linux/amd64

编译 Helloworld 程序

新建 helloworld.go

package main

import "fmt"

func main() {
    fmt.Println("Hello world")
}

编译 ARM 版本应用程序

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

编译完成之后在当前目录下会生成 helloworld,将此文件上传到 ARM 目标文件系统上执行测试

`