首页 » record » 正文

从源码编译go爬坑记录

简介

Go1.5以下是用C编译的.Go 1.5实现了bootstrapping,所以编译1.5以后的版本和编译1.5以前的版本会略有不同。bootstrapping是编译器领域的一个术语,中文翻译为自举或自展,通俗地讲“用要编译的目标语言编写其编译器(汇编器)”。Go1.5开始编译器和运行时完全用Go语言编写(还有少量汇编);go1.4是最后一个用C编写工具链的发布。
本文演示的是go的编译安装,日常使用大可不必这么麻烦。直接下载编译好的对应平台的二进制包即可。

系统环境

  • Ubuntu 18.04 LTS
  • gcc version 7.3.0

编译go1.4.3

这里选择的是1.4.3作为基础版本,因为这个版本的go还是纯c写的,所以不需要什么依赖。
1. 下载go1.4.3
2. 编译安装
在你的linux系统下解压包。

爬坑1

执行到一半时会报一个错:

# runtime/cgo
/usr/bin/x86_64-linux-gnu-ld: -r and -pie may not be used together
collect2: error: ld returned 1 exit status

解决方法

设置环境变量CGO_ENABLED

再次编译

如果执行结果如下图所示,则表示编译成功

爬坑2

time_test.go:929: Now().In(loc).Zone() = “-01”, -3600, want “GMT+1”, -3600
FAIL

由于go官方已不再维护go1.4的时区数据库,所以,该测试的报错不必理会。

参考:

编译go1.10.1

设置环境变量$GOROOT_BOOTSTRAP

这里的 $GOROOT_BOOTSTRAP 是你上一步编译的go1.4.3的安装目录。

然后进入go的src目录

编译成功!

设置环境变量

编译完go1.10.1后还没有完全结束,还需要设置三个环境变量

  • GOROOT:go语言的安装目录,类比JAVA_HOME
  • GOPATH:放置Go的第三方安装包的位置,如通过go install or go get安装的第三方库,也是go开发者的工作目录
  • PATH:环境变量path

环境变量设置

使配置立即生效

效验配置是否成功

发表评论

正在加载验证码......

请先完成验证