前言
在frp 0.20.0之前的版本,并没有arm64位的版本。树莓派3b已经用上了64位的cpu,并且自己将树莓派装上了arch linux 64位的系统。无奈之下,只能用frp的源代码去编译。frp是golang写的,但golang没有提供官方的arm64的安装程序。在这里,介绍如何编译并安装arm 64位golang。编译环境是amd 64的linux环境。
安装编译器
在go1.4(包括go1.4.3)及更早的版本,go的编译器是用C来写的,所以go1.4及之前的版本只要在有gcc的环境下就可以编译。如果想要使用go1.4及之前的版本,拿源码直接编译就可以了。在go1.4之后的版本,编译器改用了用go语言来编写,所以要编译1.4之后的版本,就需要借助go来编译。
获得go编译器环境的方式有很多种,一种是直接下载官方已经编译好的安装文件来安装,一种是通过go1.4版本进行编译所得。
一.通过安装官方编译好的安装程序
首先介绍通过下载官方编译好的安装程序进行安装go环境来获得go的编译环境,从而去编译其他版本的源码。这里的环境是在amd64的linux系统下。
- 下载
首先下载amd64位的go安装文件
1 | https://storage.googleapis.com/golang/go1.8.linux-amd64.tar.gz |
- 安装golang
1 | tar -zxvf go1.8.linux-amd64.tar.gz -c /usr/local |
到此,golang的编译环境就安装好了。因为这里我们只是想得到一个go的编译器而不是go的运行环境,所以不需要设置GOROOT,GOPATH,验证golang安装:
1 | /usr/local/go1.8/bin/go version |
- 设置GOROOT_BOOTSTRAP
1 | export GOROOT_BOOTSTRAP=/usr/local/go1.8 |
二.通过编译go1.4
我们可以直接下载 go1.4的源码,或者下载 go1.4-bootstrap-xxxxxxxx.tar.gz 来编译。go1.4-bootstrap包含了go1.4的源码,并且官方会不断更新让其能支持更多新的操作系统。目前最新的bootstrap是go1.4-bootstrap-20171003.tar.gz,从文件名来看,是2017年10月3号更新过的。要获得最新的bootstrap程序,可以在 Installing Go from source 里找到。
- 下载
1 | https://dl.google.com/go/go1.4-bootstrap-20171003.tar.gz |
- 解压编译
1 | tar xvf go1.4-bootstrap-20171003.tar.gz |
编译完之后,可以看到在go1.4/bin目录下生成一个go文件,验证:
1 | /usr/local/go1.4/bin/go version |
- 设置GOROOT_BOOTSTRAP
1 | export GOROOT_BOOTSTRAP=/usr/local/go1.4 |
源码编译golang
首先,要保证GOROOT_BOOTSTRAP环境变量指向了go的编译器home目录下。
- 下载源码
1 | https://storage.googleapis.com/golang/go1.11.src.tar.gz |
- 解压
1 | tar xvf go1.11.src.tar.gz |
- 本地编译
如果我们是想本地编译本地运行,那么我们可以通过支持src目录下的make.bash脚本完成。
1 | cd /usr/local/go/src |
编译完之后,在/usr/local/go/bin目录下会生成go文件。配置GOROOT,GOPATH环境变量就可以:
1 | export GOROOT=/usr/local/go |
- 交叉编译
如果我们想将源码编译后在其他环境运行,那么我们可以通过支持src目录下的bootstrap.bash脚本完成,并设置要运行的系统信息。
1 | GOOS=linux GOARCH=ppc64 ./bootstrap.bash |
编译好之后,将会生成../../go-${GOOS}-${GOARCH}-bootstrap目录和go-${GOOS}-${GOARCH}-bootstrap.tbz文件。将该编译好的安装程序拷到对应的系统解压,然后配置好GOROOT,GOPATH环境变量即可。
ps:1.4及之前的版本src目录下没有bootstrap.bash。如果想将1.4源码交叉编译,例如将go1.4-bootstrap-20171003.tar.gz交叉编译成指定系统,然后将编译好的程序拷到指定系统下,再在该系统下载新版本的go源码进行本地编译。那么,bootstrap.bash可以在1.4之后版本的src目录下找到,或者 这里 可以获得bootstrap.bash脚本。
附录
1 | $GOOS $GOARCH |