如何在Rust中创建私有rlib库并通过Cargo关联可执行程序?
如何规范管理私有Rust库并关联到可执行程序
核心结论
Cargo本身就是Rust官方的构建/依赖管理工具,完全替代了CMake在C/C++中的角色,私有Rust库根本不需要手动处理.rlib文件,用Cargo的本地依赖或工作区就能规范解决问题。
方案1:本地路径依赖(最直接的私有库用法)
这是管理本地私有库的标准方式,全程无需手动编译或链接.rlib:
- 创建Rust库项目:
cargo new --lib foo - 打开可执行项目的
Cargo.toml,在[dependencies]区块添加本地库的路径依赖:[dependencies] foo = { path = "../foo" } # 填写库项目相对于可执行项目的路径 - 在可执行程序的
main.rs里直接引用库代码:use foo; fn main() { foo::some_function(); // 调用库中定义的函数 } - 执行
cargo build或cargo run,Cargo会自动编译库、处理依赖链并完成链接,全程无需手动操作.rlib。
方案2:Cargo工作区(适合多项目协同)
如果你的库和可执行程序是一组关联项目,用工作区可以统一管理所有成员的构建:
- 在父目录创建
Cargo.toml作为工作区配置:[workspace] members = [ "foo", # 你的库项目目录 "my-app" # 你的可执行程序目录 ] - 在
my-app的Cargo.toml里添加依赖,写法和路径依赖一致:[dependencies] foo = { path = "../foo" } - 执行
cargo build时,Cargo会自动构建工作区内所有依赖的项目,效率更高。
为什么你的构建脚本没用?
你之前使用的rustc-link-search和rustc-link-lib是Cargo用来链接C/C++静态/动态库的机制,完全不适用于Rust的.rlib文件。Rust库的依赖管理是通过Cargo的[dependencies]声明实现的,不需要手动干预链接过程。
(不推荐)如果非要用已编译的.rlib文件
如果你的库已经预编译成.rlib,不想重新编译源码,可以通过Cargo配置传递--extern参数:
在可执行项目的.cargo/config.toml中添加:
[build] rustflags = ["--extern", "foo=./libfoo.rlib"]
然后在main.rs里直接use foo;即可。但这种方式无法让Cargo自动处理库的依赖更新,也无法追踪库的编译环境,仅适合特殊场景。
内容的提问来源于stack exchange,提问作者Plegeus
相关产品推荐
相关产品推荐

