在MIPS
及LoongArch
的架构下编译go语言二进制
首先需要找到一个已经安装go的机器, 可以是X86
或ARM
等任何可以执行go的环境
其次准备好go源码
接着进行如下操作
解压go源码
设定环境变量
GOROOT_BOOTSTRAP
/GOOS
/GOARCH
其中GOROOT_BOOTSTRAP
为当前可以执行 go 文件的安装目录, 例如当前环境的 go 可执行文件为/usr/local/go/bin/go
, 则GOROOT_BOOTSTRAP
应设置为/usr/local/go
GOOS
为目标环境系统
GOARCH
为目标架构
关于GOOS
以及GOARCH
, 可以使用命令, go tool dist list 查看, 版本越高的go支持的越多设定好环境变量后, 进入源码目录下的
src
目录, 执行脚本bootstrap.bash
等待脚本执行完毕, 会在
src
目录的上层的上层目录 即../../
目录 (脚本最后一般会输出文件路径)下生成 一个tbz
文件, 将此文件拷贝至目标机器, 并解压解压后, 进入
${解压后的目录}/bin
, 此时应该存在go
,gofmt
两个二进制文件, 执行以下./go version
, 看看能否正常运行这里在
loongarrch
架构碰到一个问题, 执行后出现 段错误gdb
了一下发现是在编译的时候似乎把依赖路径硬编码进去了(也可能是没有设置好环境变量)将解压后的文件放到与编译时的文件同一个路径即可
在目标机器设定环境变量,
GOROOT_BOOTSTRAP
,GOROOT
, 将源码文件解压到任何你想解压到的地方, 其中GOROOT_BOOTSTRAP
为之前编译出来的tbz
文件的解压路径GOROOT
为解压后的go源码文件路径
进入
$GOROOT/scr
, 执行./all.bash
, 此步骤耗时较久, 会测试一些东西执行完毕后,
$GOROOT
目录即会多出一个bin目录, 此时将整个$GOROOT
目录挪到任何你想挪到的地方, 并将$GOROOT/bin
添加到环境变量即可
如果在进行测试时失败, 可以看一下有没有超时, 测试项完成后会显示使用时间, 默认为3分钟, 类似下图
解决方式是设定环境变量 GO_TEST_TIMEOUT_SCALE
= 2, 这会将超时时间倍乘二, 变为 6 分钟