前言
rust可以使用cross简单的实现交叉编译,cross基于容器技术构建,而官方的镜像不含openssl依赖,在编译依赖openssl项目时会出现问题,此时可以基于官方镜像创建含openssl依赖的镜像。
操作
安装cross
安装cross需要docker或者podman
cargo install cross
创建镜像
以下以docker为例,为方便操作,可以将当前用户加入docker用户组。
sudo usermod -aG docker $USER newgrp docker
新建一个文件夹,并且在文件夹中创建Dockerfile
文件,其内容为
FROM ghcr.io/cross-rs/aarch64-unknown-linux-gnu:main RUN dpkg --add-architecture arm64 && \ apt-get update && \ apt-get install --assume-yes libssl-dev libssl-dev:arm64 zlib1g-dev zlib1g-dev:arm64
如果你的项目还依赖高版本的的libc6,可以将Dockerfile
的内容替换为
FROM ghcr.io/cross-rs/aarch64-unknown-linux-gnu:main RUN dpkg --add-architecture arm64 && \ echo "deb [arch=amd64,i386] http://archive.ubuntu.com/ubuntu noble main" >> /etc/apt/sources.list && \ echo "deb [arch=arm64] http://ports.ubuntu.com/ubuntu-ports noble main" >> /etc/apt/sources.list && \ apt-get update && \ apt-get install --assume-yes libc6 libc6-dev libssl-dev libssl-dev:arm64 zlib1g-dev zlib1g-dev:arm64
创建镜像,在该文件夹执行
docker build -t owner/image:tag .
编译
创建镜像完成后,进入项目,配置Cross.toml
,指定cross使用的镜像
[target.aarch64-unknown-linux-gnu] image = "owner/image:tag"
然后执行以下命令即可完成编译
cross build --release --target aarch64-unknown-linux-gnu
参考链接:https://xuanwo.io