发布于2026-07-06 阅读(0)
扫一扫,手机访问
Rust 在 Linux 上的跨平台运行实践

先从基础准备说起。
要在Linux上玩转Rust的跨平台能力,第一步自然是搞定工具链。用rustup来安装和管理Rust,这是目前最主流也最省心的方式。
curl --proto '=https' --tlsv1.2 -sSf https://sh.rustup.rs | shrustc --version、cargo --version工具链就绪之后,新建一个项目试试手:cargo new my_app && cd my_app。基础运行无非就是cargo build和cargo run这两兄弟。如果要追求极致性能,发布时记得用cargo build --release。
交叉编译是Rust跨平台的精髓所在。它的核心逻辑是:在本地开发机上为其他架构的CPU编译可执行文件。
这里的“其他架构”由目标三元组(target triple)来标识,比如:
x86_64-unknown-linux-gnu:经典的x86_64 Linux平台aarch64-unknown-linux-gnu:ARM64架构的Linuxx86_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"配置完毕之后,就可以执行交叉构建了:
cargo build --target aarch64-unknown-linux-gnu --releasecargo build --target x86_64-pc-windows-gnu --release编译产物会存放在target/目录下。
跨平台开发中,代码本身也需要学会“看人下菜碟”。条件编译就是解决这个问题的利器。
最直观的方式是直接在代码中使用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来区分不同平台的逻辑。
一个非常常见的场景是:在x86_64的主机上为ARM64的树莓派或服务器构建程序。
操作步骤其实很简单:
sudo apt-get install gcc-aarch64-linux-gnu.cargo/config.toml配置链接器:aarch64-linux-gnu-gcccargo build --target aarch64-unknown-linux-gnu --release如果想在本地验证ARM64二进制能否正常运行,可以用QEMU来模拟:
sudo apt-get install qemu-userqemu-aarch64 ./target/aarch64-unknown-linux-gnu/release/your_binary不过,更稳妥的方式还是把产物拷贝到目标设备上测试,或者通过SSH在目标上执行。毕竟,模拟环境只能保证“能跑起来”,真正的行为一致性还得靠真机验证。
当代码写好了、交叉编译也搞定了,接下来就是如何优雅地打包分发。
Linux发行包方面:
cargo install cargo-deb,然后cargo deb --release生成.debcargo 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
最后,几个实用建议:
strip target//release/your_binary ,效果立竿见影。
售后无忧
立即购买>office旗舰店
售后无忧
立即购买>office旗舰店
售后无忧
立即购买>office旗舰店
售后无忧
立即购买>office旗舰店
正版软件
正版软件
正版软件
正版软件
正版软件
1
2
3
7
8