You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何构建包含所有依赖项的单个.rlib文件?

问题原因

你通过cargo build --lib生成的mylib.rlib是Rust专属的库格式,它只包含当前自定义库的代码,并不会打包其依赖的第三方crates。当你用rustc直接编译main.rs时,rustc无法自动定位这些依赖的crates,因此抛出找不到依赖的错误。

解决方案

Rust的rlib格式本身不支持将依赖代码打包进单个文件里。如果需要生成包含所有依赖的单一静态库,你需要生成staticlib类型的库:

1. 调整库项目的Cargo.toml

在自定义库项目的Cargo.toml中,修改[lib]段的crate-type,添加staticlib类型(同时保留rlib不影响日常开发):

[lib]
crate-type = ["staticlib", "rlib"]

2. 编译生成包含所有依赖的静态库

执行编译命令:

cargo build --lib
# 若要生成发布版本,加--release参数
# cargo build --lib --release

编译完成后,在target/debug/(或target/release/)目录下会生成对应平台的静态库文件:

  • Linux/macOS:libmylib.a
  • Windows:mylib.lib
    这个文件包含了你的自定义库代码以及所有依赖的第三方crates代码。

3. 用rustc编译main.rs并链接静态库

使用生成的静态库编译你的main.rs,命令如下:

# Linux/macOS
rustc main.rs -L ./target/debug/ -l mylib -o main

# Windows
rustc main.rs -L ./target/debug/ -l mylib -o main.exe

其中-L指定静态库的所在路径,-l mylib告诉rustc链接对应的静态库文件。

替代方案:保留rlib,编译时指定依赖搜索路径

如果不想生成静态库,只想继续使用rlib,可以在编译main.rs时,通过-L参数指定依赖crates的搜索路径:

rustc main.rs --extern mylib=./target/debug/libmylib.rlib -L ./target/debug/deps/

target/debug/deps/目录下存放着cargo build生成的所有依赖crates的rlib文件,rustc会在这里找到mylib依赖的xxx crate。

内容的提问来源于stack exchange,提问作者Abdutahir

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.01 21:50:37