通过阅读这篇文章您应当可以为任何系统构建 Go 语言。
English Version
先决条件
- 从 Go 1.5 开始,Go 语言所有的源代码都使用了 Go 或者汇编语言。因此在一个安装有 Go 语言的系统中使用 Go 语言构建另一个 Go 语言版本会十分简单。这个特性叫做语言的自举。
- 使用
GOOS
和GOARCH
环境变量,我们可以为另一个平台和架构构建 Go 语言程序,这是 Go 的交叉编译特性。
因此,为我的 Lenovo Newifi 2(D2) 编译 Go 语言环境是可行的。这个路由器的官方固件基于 Openwrt,处理器为 MT7621AT,MIPS 架构小端序,配有 256M 内存。
我希望能保留官方固件而非刷机,因此我决定为我的路由器构建一个独立的 Go 语言版本。
准备
在您的系统上安装 Go>=1.5 版本:
1 | > which go |
如果您没有安装 Go 语言,请使用您发行版的包管理器安装。对于 Ubuntu 来说
1 | > sudo apt-get install golang-go |
从 下载页面 获取 Go 语言源代码。
我使用了 Golang 1.12.4:
1 | > wget https://dl.google.com/go/go1.12.4.src.tar.gz |
构建
解压代码包:
1 | > tar xvf go1.12.4.src.tar.gz |
目录结构如下:
1 | . |
进入 src
目录。开始您的构建:
1 | > GOOS=linux GOARCH=mipsle GOROOT_BOOTSTRAP=<your-go-root> ./make.bash |
安装
构建完成后,将以下文件夹复制到路由器:
1 | api |
比如,我创建了 /mnt/mmcblk0p1/usr/share/go
文件夹来存放它们。
紧接着,从 bin/mipsle
将 go
和 gofmt
移至 bin
。
添加 GOROOT
环境变量,并添加 bin
到 PATH 中:
1 | > export GOROOT=/mnt/mmcblk0p1/usr/share/go |
运行您的第一个 Go 程序
在 test.go
创建 Hello World 代码:
1 | package main |
直接运行它:
1 | > go run test.go |
或者构建+运行:
1 | > go build test.go |
一切 OK!