如何交叉编译 Rust 程序到 Linux ARM64 架构部署

文章导读
交叉编译 Rust 程序到 Linux ARM64 架构主要通过配置 rustup 目标工具链并结合系统链接器实现。首先使用 rustup 安装 Rust 环境并添加 aarch64-unknown-linux-gnu 目标支持,接着安装对应架构的 GCC 工具链(如 gcc-aarch64-linux-gnu)作为链接器。随后在 cargo build 命令中指定--target 参数即可生成
📋 目录
  1. A Rust 交叉编译实战:从 x86 到 ARM64 的完整避坑指南 (Ubuntu22 环境)
  2. B Rust 跨平台开发终极指南:使用 Cross 实现零配置交叉编译与测试
  3. C rust 交叉编译指南
  4. D rust 交叉编译 -- mac 下、windows 下 编译到 Linux 目标环境
  5. E 把数百个软件包迁移到 ARM64,Cloudflare 踩了哪些坑
  6. F FAQ
A A

交叉编译 Rust 程序到 Linux ARM64 架构主要通过配置 rustup 目标工具链并结合系统链接器实现。首先使用 rustup 安装 Rust 环境并添加 aarch64-unknown-linux-gnu 目标支持,接着安装对应架构的 GCC 工具链(如 gcc-aarch64-linux-gnu)作为链接器。随后在 cargo build 命令中指定--target 参数即可生成 ARM64 二进制文件。若遇到依赖问题,可使用 cross 工具基于 Docker 自动处理环境,或使用 cargo-zigbuild 利用 Zig 编译器简化流程。部署前需确保目标系统 glibc 版本兼容或采用静态编译。

Rust 交叉编译实战:从 x86 到 ARM64 的完整避坑指南 (Ubuntu22 环境)

想象一下这样的场景:你在 x86 架构的 Ubuntu 开发机上编写了一个高性能 Rust 服务,现在需要部署到树莓派或 NVIDIA Jetson 等 ARM 设备上运行。传统做法是在目标设备上直接编译,但对于资源受限的嵌入式设备,这往往耗时费力。交叉编译技术正是解决这一痛点的利器。本文将带你深入 Rust 交叉编译的完整流程,特别针对 Ubuntu22 环境下 x86 到 ARM64 的编译场景。不同于简单的步骤罗列,我们会剖析每个环节背后的原理,并针对实际开发中遇到的典型问题提供解决方案。无论你是正在将现有服务迁移到 ARM 平台,还是为多架构环境构建通用二进制文件,这篇指南都能帮你避开那些耗费数小时的"坑"。1. 环境准备与工具链配置 1.1 Rust 工具链的正确安装方式 许多开发者遇到的第一个陷阱就是 Rust 的安装方式。虽然 Ubuntu 仓库提供了 sudo apt install rustc 的快捷方式,但这会导致后续交叉编译的各种问题。官方推荐的安装方法是使用 rustup: curl --proto'=https'--tlsv1.2 -sSf https://sh.rustup.rs | sh 一键获取完整项目代码 bash 安装完成后,确认默认工具链:rustup show 一键获取完整项目代码 bash 典型输出应类似:Defaulthost: x86_64-unknown-linux-gnu rustup home:/home/user/.rustup installed toolchains: stable-x86_64-unknown-linux-gnu (default) active toolchain: stable-x86_64-unknown-linux-gnu (default) rustc1.70.0(90c5418062023-05-31) 一键获取完整项目代码 1.2 目标平台支持添加 对于 ARM64 架构,我们需要添加对应的标准库支持:rustup target add aarch64-unknown-linux-gnu 一键获取完整项目代码 bash 验证目标平台是否可用:rustup target list | grep installed 一键获取完整项目代码 bash 应该能看到 aarch64-unknown-linux-gnu 出现在已安装列表中。1.3 交叉编译工具链安装 Rust 编译过程仍依赖系统链接器,因此需要安装对应架构的 GCC 工具链:sudo apt update sudo apt install gcc-aarch64-linux-gnu 一键获取完整项目代码 bash 验证安装:aarch64-linux-gnu-gcc -v 一键获取完整项目代码 bash 提示:如果目标设备使用 musl libc 而非 glibc,需要选择 aarch64-unknown-linux-musl 目标并安装对应的交叉编译工具链。(来自 2026 年 4 月 17 日的资料)

Rust 跨平台开发终极指南:使用 Cross 实现零配置交叉编译与测试

🚀 快速开始:你的第一个交叉编译 创建一个简单的 Rust 项目并立即开始交叉编译:# 创建新项目 cargo new --bin hello-world cdhello-world # 交叉编译到 ARM64 Linux cross build --target aarch64-unknown-linux-gnu # 直接运行交叉编译的程序 cross run --target aarch64-unknown-linux-gnu bash 就是这么简单!Cross 会自动下载所需的 Docker 镜像、安装目标平台的工具链,并完成编译。这张图片展示了 Cross 在实际工作中的强大功能:在 x86_64 Linux 系统上成功编译并测试了 ARM64 架构的 Rust 程序。图片中的终端输出显示,Cross 自动处理了所有依赖项,包括下载 Docker 镜像、安装目标平台工具链,并成功运行了 22 个测试用例。(资料日期为 2026 年 3 月 22 日)

rust 交叉编译指南

本指南介绍如何使用 cargo-zigbuild 进行 Rust 项目的交叉编译,特别是针对 ARM64 Linux 平台。为什么选择 cargo-zigbuild cargo-zigbuild 通过 zig cc 来交叉编译 C/C++ 代码,Zig 编译器本身就是一个功能强大的交叉编译工具链,无需额外安装针对特定目标的 GCC。这使得交叉编译过程更加简单和可靠。安装步骤 1. 安装 Zig 在 Windows 系统上使用 winget 安装 Zig: wingetinstallZig.Zig AI 写代码 bash 1 2. 安装 cargo-zigbuild 使用 cargo 安装 cargo-zigbuild: cargoinstallcargo-zigbuild AI 写代码 bash 1 3. 添加 Rust 目标架构 添加需要交叉编译的目标平台,例如 ARM64Linux: rustup targetaddaarch64-unknown-linux-gnu AI 写代码 bash 1 编译命令 基本编译 针对 ARM64Linux 平台进行 Release 编译:cargozigbuild--targetaarch64-unknown-linux-gnu--release AI 写代码 bash 1 其他目标平台 你可以为不同的目标平台添加相应的架构:# ARMv7 Linux (32 位)rustup targetaddarmv7-unknown-linux-gnueabihfcargozigbuild--targetarmv7-unknown-linux-gnueabihf--release# x86_64 Linuxrustup targetaddx86_64-unknown-linux-gnucargozigbuild--targetx86_64-unknown-linux-gnu--release AI 写代码 bash(2026 年 4 月 16 日的资料)

如何交叉编译 Rust 程序到 Linux ARM64 架构部署

rust 交叉编译 -- mac 下、windows 下 编译到 Linux 目标环境

Windows 下编译到 arm64-linux 需要下载 arm 的编译 toolchain,有不同的选择:使用 aarch64-none-linux-gnu 或者 aarch64-none-linux-musl。这里使用 aarch64-none-linux-gnu 安装好 rust,可以正常编译 下载 windows 下的 arm-gnu-toolchain,并安装,配置环境变量 aarch64-none-linux-gnu/bin 地址:https://developer.arm.com/downloads/-/arm-gnu-toolchain-downloads,选择 AArch64 GNU/Linuxtarget(aarch64-none-linux-gnu) 安装,后配置环境变量。在终端中执行 aarch64-none-linux-gnu-gcc -v 正常输出,证明配置完成。配置~/.cargo/config.toml, 注意不是项目中的 Cargo.toml [target.aarch64-unknown-linux-gnu]linker="aarch64-none-linux-gnu-gcc" 安装 target 执行 rustup targetaddaarch64-unknown-linux-gnu 尝试编译 执行 cargo build--target=aarch64-unknown-linux-gnu glibc 版本问题 编译后,在目标机器上没有对应的 glibc 版本,使用静态链接,在 ~/.cargo/config.toml 修改如下 [target.aarch64-unknown-linux-gnu] linker ="aarch64-none-linux-gnu-gcc"rustflags = ["-C","target-feature=+crt-static"] macOS 下编译到 arm64-linux 需要下载 arm 的编译 toolchain,有几种选择。安装好 rust,可以正常编译 下载 macOS 下的 toolchain,并安装,配置环境变量 aarch64-none-linux-gnu/bin 地址:https://github.com/messense/homebrew-macos-cross-toolchains/releases 本机是 x86 intel 处理器,目标机器是 aarch64-linux , 使用 gnu libc 选择 aarch64-unknown-linux-gnu-x86_64-darwin.tar.gz 包进行下载。解压后,配置 macOS 环境变量。在终端中执行 aarch64-unknown-linux-gnu-gcc-v 正常输出,证明配置完成。配置~/.cargo/config.toml, 注意不是项目中的 Cargo.toml [target.aarch64-unknown-linux-gnu]linker="aarch64-unknown-linux-gnu-gcc" 安装 target 执行 rustup targetaddaarch64-unknown-linux-gnu 尝试编译 执行 cargo build--target=aarch64-unknown-linux-gnu(撰于 2023 年 9 月 12 日)

把数百个软件包迁移到 ARM64,Cloudflare 踩了哪些坑

两条主路:Go 和 Rust 的交叉编译 对于 Go 和 Rust,情况相对乐观,两个语言都有成熟的跨平台交叉编译支持。Go 的迁移方式 Go 官方把 ARM64 列为一类支持架构,交叉编译只需要在 Debian 上额外安装 crossbuild-essential-arm64,然后把原来的 go build 替换为:GOARCH=arm64 CGO_ENABLED=1 go build 注意 CGO_ENABLED=1 是必须显式指定的,因为交叉编译时 Go 默认会关掉 cgo。他们的做法是把原来的单次构建改成一个循环,同时为 amd64 和 arm64 各跑一遍,产出的二进制再跑测试框架验证。Rust 的迁移方式 Rust 的交叉编译支持同样完善。同样先安装 crossbuild-essential-arm64,然后在 cargo build 或 rustc 里指定--target aarch64-unknown-linux-gnu 即可。(搜索结果收录于 2026 年 4 月 25 日)

FAQ

交叉编译时遇到链接器错误怎么办?

如何交叉编译 Rust 程序到 Linux ARM64 架构部署

通常是因为未安装对应架构的 GCC 工具链。需执行 sudo apt install gcc-aarch64-linux-gnu 安装链接器,并在 ~/.cargo/config.toml 中配置 linker 路径。

cross 工具和原生交叉编译有什么区别?

如何交叉编译 Rust 程序到 Linux ARM64 架构部署

cross 基于 Docker 容器自动管理目标平台环境,无需手动安装交叉编译工具链,适合依赖复杂的场景;原生交叉编译则需手动配置链接器和目标库。

目标设备 glibc 版本不一致如何解决?

可采用静态编译方式,在 cargo config 中设置 rustflags = ["-C", "target-feature=+crt-static"],或选用 musl libc 目标如 aarch64-unknown-linux-musl。