在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 分钟