在 Linux 上使用 Rust 进行跨平台开发
一 环境准备与工具链管理
curl --proto '=https' --tlsv1.2 -sSf https://sh.rustup.rs | sh,随后执行 source $HOME/.cargo/env。rustup target list 查看可用目标;用 rustup target add <target-triple> 安装所需目标的标准库,例如 x86_64-unknown-linux-gnu、x86_64-pc-windows-gnu、aarch64-apple-darwin、wasm32-unknown-unknown 等。x86_64-pc-windows-gnu(Linux 主机常用)x86_64-pc-windows-msvcx86_64-unknown-linux-gnux86_64-unknown-linux-musl(便于静态分发)x86_64-apple-darwinaarch64-apple-darwinwasm32-unknown-unknown二 交叉编译流程与常见目标
cargo build --target <target-triple>,产物位于 target/<target-triple>/debug|release。sudo apt-get install mingw-w64(Debian/Ubuntu),或 sudo dnf install mingw64-gcc(Fedora)。rustup target add x86_64-pc-windows-gnu。.cargo/config.toml,加入[target.x86_64-pc-windows-gnu]
linker = "x86_64-w64-mingw32-gcc"
cargo build --target x86_64-pc-windows-gnu --release,产物为 target/x86_64-pc-windows-gnu/release/xxx.exe。sudo apt-get install gcc-aarch64-linux-gnu。rustup target add aarch64-unknown-linux-gnu。[target.aarch64-unknown-linux-gnu]
linker = "aarch64-linux-gnu-gcc"
cargo build --target aarch64-unknown-linux-gnu --release。rustup target add wasm32-unknown-unknown。cargo install wasm-pack 或 cargo install wasm-bindgen-cli。cargo build --target wasm32-unknown-unknown --release,用于后续与前端集成或打包。三 代码层面的跨平台实践
#[cfg(target_os = "...")] 区分平台逻辑,例如:fn main() {
#[cfg(target_os = "linux")]
println!("Running on Linux");
#[cfg(target_os = "windows")]
println!("Running on Windows");
}
std::path::PathBuf 处理路径,避免硬编码分隔符;必要时结合跨平台库(如 path-slash)统一路径风格。[target.'cfg(unix)'.dependencies]
libc = "0.2"
[target.'cfg(windows)'.dependencies]
winapi = "0.3"
log 与 env_logger 统一日志输出,便于多平台定位问题。四 自动化测试与 CI
name: CI
on: [push, pull_request]
jobs:
build:
runs-on: ${{ matrix.os }}
strategy:
matrix:
os: [ubuntu-latest, windows-latest, macos-latest]
steps:
- uses: actions/checkout@v4
- uses: dtolnay/rust-toolchain@stable
- run: cargo build --release
- run: cargo test --release
cargo install cross --git https://github.com/cross-rs/crosscross build --target aarch64-unknown-linux-gnu、cross test --target mips64-unknown-linux-gnuabi64五 进阶场景与排错要点
aarch64-linux-android、armv7-linux-androideabi、i686-linux-android,并配置指向 Android NDK 的链接器;产物为 .so 动态库,供 Android 工程集成。aarch64-apple-ios、x86_64-apple-ios,使用 cargo-lipo 生成 通用库(.a),供 iOS/Flutter 集成。x86_64-unknown-linux-musl 更易获得静态链接的可执行文件。.cargo/config.toml 为目标显式指定 linker,并安装对应交叉编译器。gcc-aarch64-linux-gnu)。