我是怎么改善 Rust 编译体验的

Rust 编译慢、target/ 目录大,这是老生常谈了。这篇记录一下我目前在用的几个改善手段,以我的项目 ClewdR(394 个 crate 依赖的异步 Web 服务)为例。 环境:Rust 1.94.1,CachyOS (Arch-based),NVMe SSD,Btrfs。 rust-lld 链接是 Rust 编译的最后一步,也是传统上最慢的一步。GNU ld 在这里表现很差,特别是开了 LTO 的时候。 以前的做法是手动装 lld 或 mold,然后在 .cargo/config.toml 里配: [target.x86_64-unknown-linux-gnu] linker = "clang" rustflags = ["-C", "link-arg=-fuse-ld=lld"] 但从 Rust 1.85(2025-02-20)开始,rust-lld 在 x86_64-unknown-linux-gnu 上已经是默认链接器了,不需要任何配置: $ readelf -p .comment target/release/clewdr String dump of section '.comment': [ 1] Linker: LLD 21.1.8 [ 5f] rustc version 1.94.1 (e408947bf 2026-03-25) 升级 Rust 就行,免费午餐。 顺带一提,社区里还有两个值得关注的替代链接器: mold:以速度为卖点的链接器,在非 LTO 场景下通常比 lld 更快,不过对 LTO 的支持有限。 wild:一个用 Rust 写的实验性链接器,目标是成为最快的 Linux ELF 链接器,做了大量多线程优化。目前还在活跃开发中,有兴趣可以关注。 对于大多数人来说,默认的 rust-lld 已经够用了。 ...

2026年4月6日 · 2 分钟

用 cargo-zigbuild 交叉编译 Rust 项目到 FreeBSD

记录一下在 Linux (x86_64) 上用 cargo-zigbuild 交叉编译 Rust 项目到 FreeBSD x86_64 的踩坑过程。项目是一个 Discord bot,依赖了 sysinfo、tikv-jemallocator、sea-orm(SQLite) 等 crate。 背景 Zig 自带了多平台的 libc 和交叉编译工具链,cargo-zigbuild 利用 Zig 作为 linker 来实现 Rust 的交叉编译,通常比自己配置交叉工具链方便很多。但 FreeBSD 作为目标平台时会遇到一些特殊问题。 准备 # 安装 FreeBSD 目标 rustup target add x86_64-unknown-freebsd # 安装 cargo-zigbuild(如果还没有) cargo install cargo-zigbuild 问题一:缺少 FreeBSD 系统库 编译本身顺利通过,但链接阶段报错: error: unable to find dynamic system library 'geom' using strategy 'no_fallback' sysinfo crate 在 FreeBSD 上需要链接 libkvm、libprocstat、libgeom、libdevstat 等 FreeBSD base system 的库。Zig 的工具链只提供 libc,不包含这些系统库。 ...

2026年4月6日 · 4 分钟