Skip to content

rust.打包优化

win7 目标发布

切换到 nightly 版本,使用以下命令构建:

bash
# 切换 版本
rustup override set nightly

# 安装 rust-src
rustup component add rust-src --toolchain nightly-x86_64-pc-windows-msvc

# 构建,目标也可选择 `i686-win7-windows-msvc`
cargo build --release -Z build-std --target x86_64-win7-windows-msvc

在发布模式下构建

Minimum Rust: 1.0

默认情况下,cargo build 在调试模式下构建 Rust 二进制文件。调试模式会禁用许多优化,这有助于调试器(以及运行它们的 IDE)提供更好的调试体验。调试时构建的二进制文件可比发布时构建的二进制文件大 30% 或更多。

若要最小化二进制大小,请在发布模式下构建:

bash
cargo build --release

strip 二进制符号

OS: *nixMinimum Rust: 1.59

默认情况下,在 LinuxmacOS 上,符号信息包含在编译 .elf 文件中。正确执行二进制文件不需要此信息。

Cargo 可以配置为自动 strip 二进制文件。按这种方式修改 Cargo.toml

toml
[profile.release]
strip = true  # 自动从二进制文件去除符号信息.

Rust 1.59 之前,直接在 .elf 文件上运行 strip

sh
$ strip target/release/min-sized-rust

针对尺寸进行优化

Minimum Rust: 1.28

Cargo 发布模式默认优化级别为 3,这会优化二进制文件的执行速度。要指示 Cargo 针对二进制大小进行优化,请在 Cargo.toml 使用 z 优化级别:

toml
[profile.release]
opt-level = "z"  #  二进制文件大小优化

启用链接时优化 (LTO)

Minimum Rust: 1.0

默认情况下,Cargo 指示编译单元进行单独编译和优化。LTO 指示链接器在 link 阶段进行优化。例如,这可以删除无用代码,并且通常可以减小二进制大小。

Cargo.toml 中启用 LTO:

toml
[profile.release]
lto = true