商城首页欢迎来到中国正版软件门户

您的位置: 首页 > 文章列表 > 编程开发 > Rust如何在Linux上跨平台运行

Rust如何在Linux上跨平台运行

  发布于2026-07-06 阅读(0)

扫一扫,手机访问

Rust 在 Linux 上的跨平台运行实践

Rust如何在Linux上跨平台运行

先从基础准备说起。

一 准备与基础

要在Linux上玩转Rust的跨平台能力,第一步自然是搞定工具链。用rustup来安装和管理Rust,这是目前最主流也最省心的方式。

  • 安装命令:curl --proto '=https' --tlsv1.2 -sSf https://sh.rustup.rs | sh
  • 验证安装:rustc --versioncargo --version

工具链就绪之后,新建一个项目试试手:cargo new my_app && cd my_app。基础运行无非就是cargo buildcargo run这两兄弟。如果要追求极致性能,发布时记得用cargo build --release

二 交叉编译到不同平台

交叉编译是Rust跨平台的精髓所在。它的核心逻辑是:在本地开发机上为其他架构的CPU编译可执行文件。

这里的“其他架构”由目标三元组(target triple)来标识,比如:

  • x86_64-unknown-linux-gnu:经典的x86_64 Linux平台
  • aarch64-unknown-linux-gnu:ARM64架构的Linux
  • x86_64-pc-windows-msvc:64位Windows平台

先查看一下当前支持哪些目标:rustup target list。然后添加你需要的:rustup target add x86_64-unknown-linux-gnu aarch64-unknown-linux-gnu

但光是添加目标还不够,还需要一个关键的桥梁——链接器。在.cargo/config.toml中为目标配置交叉链接器。以ARM64为例:

  • 安装交叉工具链:sudo apt-get install gcc-aarch64-linux-gnu
  • .cargo/config.toml配置:
    [target.aarch64-unknown-linux-gnu]linker = "aarch64-linux-gnu-gcc"

配置完毕之后,就可以执行交叉构建了:

  • Linux目标:cargo build --target aarch64-unknown-linux-gnu --release
  • Windows目标:cargo build --target x86_64-pc-windows-gnu --release

编译产物会存放在target//release/目录下。

三 条件编译与依赖管理

跨平台开发中,代码本身也需要学会“看人下菜碟”。条件编译就是解决这个问题的利器。

最直观的方式是直接在代码中使用cfg!#[cfg()]属性:

#[cfg(target_os = "linux")]fn os_specific() { println!("Linux!"); }#[cfg(target_arch = "aarch64")]fn arch_specific() { println!("ARM64!"); }fn main() {if cfg!(target_os = "linux") { os_specific(); }if cfg!(target_arch = "aarch64") { arch_specific(); }}

依赖管理同样可以按目标进行差异化配置。在Cargo.toml中,可以指定不同平台下的依赖:

[target.'cfg(windows)'.dependencies]winapi = { version = "0.3", features = ["fileapi"] }[target.'cfg(unix)'.dependencies]libc = "0.2"[target.'cfg(target_arch = "wasm32")'.dependencies]wasm-bindgen = "0.2"

另外,路径处理是跨平台开发中最容易翻车的地方。务必使用std::path来处理路径,避免硬编码分隔符。必要时用cfg来区分不同平台的逻辑。

四 在 Linux 上交叉编译 Linux 多架构

一个非常常见的场景是:在x86_64的主机上为ARM64的树莓派或服务器构建程序。

操作步骤其实很简单:

  • 安装工具链:sudo apt-get install gcc-aarch64-linux-gnu
  • .cargo/config.toml配置链接器:aarch64-linux-gnu-gcc
  • 构建:cargo build --target aarch64-unknown-linux-gnu --release

如果想在本地验证ARM64二进制能否正常运行,可以用QEMU来模拟:

  • 安装QEMU:sudo apt-get install qemu-user
  • 运行:qemu-aarch64 ./target/aarch64-unknown-linux-gnu/release/your_binary

不过,更稳妥的方式还是把产物拷贝到目标设备上测试,或者通过SSH在目标上执行。毕竟,模拟环境只能保证“能跑起来”,真正的行为一致性还得靠真机验证。

五 打包分发与 CI 自动化

当代码写好了、交叉编译也搞定了,接下来就是如何优雅地打包分发。

Linux发行包方面:

  • Debian系:cargo install cargo-deb,然后cargo deb --release生成.deb
  • RHEL/CentOS系:cargo install cargo-rpm,然后cargo rpm --release生成.rpm

如果你觉得每次手动配置交叉工具链太麻烦,可以考虑使用cross——一个基于Docker的构建工具。安装只需cargo install cross,构建命令是cross build --target x86_64-unknown-linux-gnu。它将所有的环境配置都封装在Docker镜像中,省心不少。

在CI环境中自动化整个流程就更香了。以GitHub Actions为例,可以配置矩阵构建,同时对多个目标进行编译和测试:

name: CIon: [push, pull_request]jobs:build:runs-on: ubuntu-lateststrategy:matrix:target: [x86_64-unknown-linux-gnu, aarch64-unknown-linux-gnu, x86_64-pc-windows-gnu]steps:- uses: actions/checkout@v4- uses: actions-rs/toolchain@v1with:toolchain: stabletarget: ${{ matrix.target }}override: true- run: cargo build --target ${{ matrix.target }} --release- run: cargo test --target ${{ matrix.target }} --release

最后,几个实用建议:

  • 优先静态链接(比如使用musl)。静态链接能大幅减少运行时依赖,便于分发。若采用动态链接,必须确保目标系统具备对应的glibc版本,否则会面临“找不到库”的尴尬。
  • 减小二进制体积:使用strip target//release/your_binary,效果立竿见影。
  • 注意C依赖:如果项目中包含了需要C语言库的crate(比如openssl-sys),交叉编译时需要准备好目标架构的头文件和库,或者直接使用发行版提供的交叉库。
本文转载于:https://www.yisu.com/ask/50009969.html 如有侵犯,请联系zhengruancom@outlook.com删除。
免责声明:正软商城发布此文仅为传递信息,不代表正软商城认同其观点或证实其描述。

热门关注