阳🐑了,然后趁这段时间,稍微整理一下这段时间记下来的笔记.
用到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
这个项目非常的好用.