0%

在MIPS及LoongArch的架构下编译go语言二进制

MIPSLoongArch的架构下编译go语言二进制

首先需要找到一个已经安装go的机器, 可以是X86ARM等任何可以执行go的环境

其次准备好go源码

接着进行如下操作

  1. 解压go源码

  2. 设定环境变量 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支持的越多

  3. image-20240416195706201

  4. 设定好环境变量后, 进入源码目录下的src目录, 执行脚本 bootstrap.bash

image-20240416195943599

  1. 等待脚本执行完毕, 会在src目录的上层的上层目录 即 ../../ 目录 (脚本最后一般会输出文件路径)下生成 一个tbz文件, 将此文件拷贝至目标机器, 并解压

  2. 解压后, 进入 ${解压后的目录}/bin , 此时应该存在 go, gofmt 两个二进制文件, 执行以下 ./go version , 看看能否正常运行

    1. 这里在loongarrch架构碰到一个问题, 执行后出现 段错误

      image-20240416200939524

    2. gdb了一下发现是在编译的时候似乎把依赖路径硬编码进去了(也可能是没有设置好环境变量)

    3. 将解压后的文件放到与编译时的文件同一个路径即可

  1. 在目标机器设定环境变量, GOROOT_BOOTSTRAP , GOROOT, 将源码文件解压到任何你想解压到的地方, 其中

    1. GOROOT_BOOTSTRAP 为之前编译出来的tbz文件的解压路径

    2. GOROOT 为解压后的go源码文件路径

  2. 进入 $GOROOT/scr, 执行 ./all.bash, 此步骤耗时较久, 会测试一些东西

  3. 执行完毕后, $GOROOT目录即会多出一个bin目录, 此时将整个$GOROOT目录挪到任何你想挪到的地方, 并将 $GOROOT/bin 添加到环境变量即可

如果在进行测试时失败, 可以看一下有没有超时, 测试项完成后会显示使用时间, 默认为3分钟, 类似下图

image2023-2-17_11-24-37

解决方式是设定环境变量 GO_TEST_TIMEOUT_SCALE = 2, 这会将超时时间倍乘二, 变为 6 分钟

-------------本文结束感谢您的阅读-------------