0%

Golang交叉编译

阳🐑了,然后趁这段时间,稍微整理一下这段时间记下来的笔记.

用到golang的交叉编译是因为想在路由器上使用cloudreve,但是路由器的CPU指令集是mips的,开发者那没有预编译这个版本,然后在我那个性能孱弱的路由器上跑docker就算了,所以就打算自己编译下.

目标: Darwin平台 交叉编译golang程序到 mips平台下可执行程序.

1.安装交叉编译工具链

首先是参考了这个老哥的译文

https://saekiraku.github.io/article/18577/

装上了MacOS下用于交叉编译的c库,我直接装全了,省的以后还有什么奇怪平台的需求,也可以只with一部分.

brew install FiloSottile/musl-cross/musl-cross --with-x86_64 --with-aarch64 --with-arm-hf --with-i486 --with-arm --with-mips --with-mipsel --with-mips64 --with-mips64el

2.开始go build

主要是踩了一个坑,因为被编译的程序需要sqlite环境,sqlite是需要目标系统本地C类库支持的,所以必须要开启CGO,也就是CGO_ENABLED=1

  • GOOS是目标平台

  • GOARCH是目标cpu指令集

  • GOMIPS是mips的特有软浮点

  • CC就是指令集了这里应该放绝对路径的目标平台交叉编译指令集

将上面几点放在一条命令中,然后build

GOOS=linux GOARCH=mipsle GOMIPS=softfloat CGO_ENABLED=1 CC=mipsel-linux-muslsf CGO_LDFLAGS="-static" go build -a -ldflags="-s -w" -o cloudreve

最后编译完成的二进制就可以直接在目标平台上运行了.

然后最后顺便给我的cloudreve加了一个https,acme.sh这个项目非常的好用.