在龙芯3A5000上编译rclone

0

rclone是一款使用广泛的存储实用工具,支持多种存储后端。由于rclone本身并未提供loongarch64指令集架构的二进制包,需要从源代码进行编译。rclone的源代码采用go语言编写,而go语言在2022年8月的时候自1.19版本开始提供了对loongarch64指令集的支持,但go语言的官网上并未提供编译好的二进制包可供使用。
此外,尽管统信UOS在其apt源中提供了go 1.15的软件包,但较新版本的rclone中的部分模块和依赖需要使用至少1.18版本的go编译器才能正常编译,因此在开始编译rclone之前,首先需要解决在龙芯3A5000上的go语言编译环境。
首先尝试直接在龙芯3A5000上编译go1.19.1版本,但似乎这样做并不能成功,会出现类似如下的错误:

转而尝试使用以下命令在x86或者arm环境下交叉编译生成loongarch64下的go编译器:

然而不幸的是,交叉编译出来的二进制文件在龙芯3A5000上并不能直接运行,运行时报错为segmentation fault
后来,在loongnix官网上看到关于这一状况的说明:

使用uname -a命令在系统内查看内核版本,确认统信UOS的内核版本的确为4.19,那么此时解决方案也已经明了:使用由龙芯开源社区提供的预编译二进制文件。
配置好相关环境变量后,在rclone目录下执行make或者go build -v即可,不过事情并不如想象的那般顺利,此时出现错误提示如下

这个问题倒是号解决,这是由于一些软件包中没有为loongarch64架构定义相关的值,简单粗暴的办法是将go/pkg/mod/github.com/shirou/gopsutil/[email protected]目录下的host_linux_amd64.go复制为host_linux_loong64.go,并将go/pkg/mod/go.etcd.io/[email protected]目录下的bolt_amd64.go复制为bolt_loong64.go,此时再重新执行make或者go build -v即可即可顺利完成编译过程,生成rclone的龙芯3A5000可执行文件,至此在龙芯3A5000上编译rclone的工作全部完成。

Comments

您的电子邮箱地址不会被公开。 必填项已用*标注