Rust 在 Linux 上的跨平台运行实践
一 准备与基础
curl --proto '=https' --tlsv1.2 -sSf https://sh.rustup.rs | shrustc --version、cargo --versioncargo new my_app && cd my_appcargo build、cargo run(如需优化发布用 cargo build --release)二 交叉编译到不同平台
rustup target listrustup target add x86_64-unknown-linux-gnu aarch64-unknown-linux-gnusudo apt-get install gcc-aarch64-linux-gnu[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三 条件编译与依赖管理
#[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(); }
}
[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"
四 在 Linux 上交叉编译 Linux 多架构
sudo apt-get install gcc-aarch64-linux-gnu[target.aarch64-unknown-linux-gnu]
linker = "aarch64-linux-gnu-gcc"
cargo build --target aarch64-unknown-linux-gnu --releasesudo apt-get install qemu-userqemu-aarch64 ./target/aarch64-unknown-linux-gnu/release/your_binary五 打包分发与 CI 自动化
cargo install cargo-deb 后 cargo deb --release 生成 .debcargo install cargo-rpm 后 cargo rpm --release 生成 .rpmcargo install crosscross build --target x86_64-unknown-linux-gnuname: CI
on: [push, pull_request]
jobs:
build:
runs-on: ubuntu-latest
strategy:
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@v1
with:
toolchain: stable
target: ${{ matrix.target }}
override: true
- run: cargo build --target ${{ matrix.target }} --release
- run: cargo test --target ${{ matrix.target }} --release
strip target/<target>/release/your_binary