文章

修复rust使用cross交叉编译aarch的openssl依赖

  编辑于:2024-10-15
文章目录

前言

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

发表回复