go build
本文由 简悦 SimpRead 转码, 原文地址 https://blog.csdn.net/sanallen/article/details/82118952
参考文档
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_TARGET
和CXX_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 目标文件系统上执行测试