使用Arm Mac 构建 Rust Linux等环境
因为在Mac下缺少一些基础的依赖,所以在Mac下打包Linux的程序会失败,所以我们将采用Corss进行交叉编译来实现.
功能
cross
将提供交叉汇编所需的所有成分,而无需触摸您的系统安装。cross
提供了一个可产生最便携式二进制文件的环境,跨工具链和交叉编译的库。cross
可以测试I686和X86_64以外的架构。- 支持稳定版、测试版和预览版通道。
依赖
- rustup
- 进行交叉测试需要支持
binfmt_misc
的Linux内核。 - Docker / Podman
原理
cross
将调用容器内的依赖进行打包
快速开始
安装
cargo install cross --git https://github.com/cross-rs/cross
使用
cross
可以通过 target
主动寻找对应的 docker
镜像运行容器.当编译成功后会自动删除容器.
cross build --target aarch64-unknown-linux-gnu
问题
当使用 M芯片的 Mac 的时候就会出现提示找不到这是因为 aarch64-unknown-linux-gnu 的 docker 并未打包为 arm 架构所以我们可以预先下载镜像
docker pull ghcr.io/cross-rs/aarch64-unknown-linux-gnu --platform linux/amd64
支持目标
Target | libc | GCC | C++ | QEMU | test |
---|---|---|---|---|---|
aarch64-linux-android [1] |
9.0.8 | 9.0.8 | ✓ | 6.1.0 | ✓ |
aarch64-unknown-linux-gnu |
2.31 | 9.4.0 | ✓ | 6.1.0 | ✓ |
aarch64-unknown-linux-gnu:centos [7] |
2.17 | 4.8.5 | 4.2.1 | ✓ | |
aarch64-unknown-linux-musl |
1.2.3 | 9.2.0 | ✓ | 6.1.0 | ✓ |
arm-linux-androideabi [1] |
9.0.8 | 9.0.8 | ✓ | 6.1.0 | ✓ |
arm-unknown-linux-gnueabi |
2.31 | 9.4.0 | ✓ | 6.1.0 | ✓ |
arm-unknown-linux-gnueabihf |
2.31 | 8.5.0 | ✓ | 6.1.0 | ✓ |
arm-unknown-linux-musleabi |
1.2.3 | 9.2.0 | ✓ | 6.1.0 | ✓ |
arm-unknown-linux-musleabihf |
1.2.3 | 9.2.0 | ✓ | 6.1.0 | ✓ |
armv5te-unknown-linux-gnueabi |
2.31 | 9.4.0 | ✓ | 6.1.0 | ✓ |
armv5te-unknown-linux-musleabi |
1.2.3 | 9.2.0 | ✓ | 6.1.0 | ✓ |
armv7-linux-androideabi [1] |
9.0.8 | 9.0.8 | ✓ | 6.1.0 | ✓ |
armv7-unknown-linux-gnueabi |
2.31 | 9.4.0 | ✓ | 6.1.0 | ✓ |
armv7-unknown-linux-gnueabihf |
2.31 | 9.4.0 | ✓ | 6.1.0 | ✓ |
armv7-unknown-linux-musleabi |
1.2.3 | 9.2.0 | ✓ | 6.1.0 | ✓ |
armv7-unknown-linux-musleabihf |
1.2.3 | 9.2.0 | ✓ | 6.1.0 | ✓ |
i586-unknown-linux-gnu |
2.31 | 9.4.0 | ✓ | N/A | ✓ |
i586-unknown-linux-musl |
1.2.3 | 9.2.0 | ✓ | N/A | ✓ |
i686-unknown-freebsd |
1.5 | 6.4.0 | ✓ | N/A | |
i686-linux-android [1] |
9.0.8 | 9.0.8 | ✓ | 6.1.0 | ✓ |
i686-pc-windows-gnu |
N/A | 9.4 | ✓ | N/A | ✓ |
i686-unknown-linux-gnu |
2.31 | 9.4.0 | ✓ | 6.1.0 | ✓ |
loongarch64-unknown-linux-gnu |
2.36 | 14.2.0 | ✓ | 8.2.2 | ✓ |
loongarch64-unknown-linux-musl |
1.2.5 | 14.2.0 | ✓ | 8.2.2 | ✓ |
mips-unknown-linux-gnu |
2.30 | 9.4.0 | ✓ | 6.1.0 | ✓ |
mips-unknown-linux-musl |
1.2.3 | 9.2.0 | ✓ | 6.1.0 | ✓ |
mips64-unknown-linux-gnuabi64 |
2.30 | 9.4.0 | ✓ | 6.1.0 | ✓ |
mips64-unknown-linux-muslabi64 |
1.2.3 | 9.2.0 | ✓ | 6.1.0 | ✓ |
mips64el-unknown-linux-gnuabi64 |
2.30 | 9.4.0 | ✓ | 6.1.0 | ✓ |
mips64el-unknown-linux-muslabi64 |
1.2.3 | 9.2.0 | ✓ | 6.1.0 | ✓ |
mipsel-unknown-linux-gnu |
2.30 | 9.4.0 | ✓ | 6.1.0 | ✓ |
mipsel-unknown-linux-musl |
1.2.3 | 9.2.0 | ✓ | 6.1.0 | ✓ |
powerpc-unknown-linux-gnu |
2.31 | 9.4.0 | ✓ | 6.1.0 | ✓ |
powerpc64-unknown-linux-gnu |
2.31 | 9.4.0 | ✓ | 6.1.0 | ✓ |
powerpc64le-unknown-linux-gnu |
2.31 | 9.4.0 | ✓ | 6.1.0 | ✓ |
riscv64gc-unknown-linux-gnu |
2.35 | 11.4.0 | ✓ | 8.2.2 | ✓ |
s390x-unknown-linux-gnu |
2.31 | 9.4.0 | ✓ | 6.1.0 | ✓ |
sparc64-unknown-linux-gnu |
2.31 | 9.4.0 | ✓ | 6.1.0 | ✓ |
sparcv9-sun-solaris |
1.22.7 | 8.4.0 | ✓ | N/A | |
thumbv6m-none-eabi [4] |
3.3.0 | 9.2.1 | N/A | ||
thumbv7em-none-eabi [4] |
3.3.0 | 9.2.1 | N/A | ||
thumbv7em-none-eabihf [4] |
3.3.0 | 9.2.1 | N/A | ||
thumbv7m-none-eabi [4] |
3.3.0 | 9.2.1 | N/A | ||
thumbv7neon-linux-androideabi [1] |
9.0.8 | 9.0.8 | ✓ | 6.1.0 | ✓ |
thumbv7neon-unknown-linux-gnueabihf |
2.31 | 9.4.0 | ✓ | N/A | ✓ |
thumbv8m.base-none-eabi [4] |
3.3.0 | 9.2.1 | N/A | ||
thumbv8m.main-none-eabi [4] |
3.3.0 | 9.2.1 | N/A | ||
thumbv8m.main-none-eabihf [4] |
3.3.0 | 9.2.1 | N/A | ||
wasm32-unknown-emscripten [6] |
3.1.14 | 15.0.0 | ✓ | N/A | ✓ |
x86_64-linux-android [1] |
9.0.8 | 9.0.8 | ✓ | 6.1.0 | ✓ |
x86_64-pc-windows-gnu |
N/A | 9.3 | ✓ | N/A | ✓ |
x86_64-pc-solaris |
1.22.7 | 8.4.0 | ✓ | N/A | |
x86_64-unknown-freebsd |
1.5 | 6.4.0 | ✓ | N/A | |
x86_64-unknown-dragonfly [2] [3] |
6.0.1 | 10.3.0 | ✓ | N/A | |
x86_64-unknown-illumos |
1.20.4 | 8.4.0 | ✓ | N/A | |
x86_64-unknown-linux-gnu |
2.31 | 9.4.0 | ✓ | 6.1.0 | ✓ |
x86_64-unknown-linux-gnu:centos [5] |
2.17 | 4.8.5 | ✓ | 4.2.1 | ✓ |
x86_64-unknown-linux-musl |
1.2.3 | 9.2.0 | ✓ | N/A | ✓ |
x86_64-unknown-netbsd [3] |
9.2.0 | 9.4.0 | ✓ | N/A |
评论