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

如何在Rust中创建私有rlib库并通过Cargo关联可执行程序?

如何规范管理私有Rust库并关联到可执行程序

核心结论

Cargo本身就是Rust官方的构建/依赖管理工具,完全替代了CMake在C/C++中的角色,私有Rust库根本不需要手动处理.rlib文件,用Cargo的本地依赖或工作区就能规范解决问题。


方案1:本地路径依赖(最直接的私有库用法)

这是管理本地私有库的标准方式,全程无需手动编译或链接.rlib:

  1. 创建Rust库项目:
    cargo new --lib foo
    
  2. 打开可执行项目的Cargo.toml,在[dependencies]区块添加本地库的路径依赖:
    [dependencies]
    foo = { path = "../foo" } # 填写库项目相对于可执行项目的路径
    
  3. 在可执行程序的main.rs里直接引用库代码:
    use foo;
    
    fn main() {
        foo::some_function(); // 调用库中定义的函数
    }
    
  4. 执行cargo build或cargo run,Cargo会自动编译库、处理依赖链并完成链接,全程无需手动操作.rlib。

方案2:Cargo工作区(适合多项目协同)

如果你的库和可执行程序是一组关联项目,用工作区可以统一管理所有成员的构建:

  1. 在父目录创建Cargo.toml作为工作区配置:
    [workspace]
    members = [
        "foo",      # 你的库项目目录
        "my-app"    # 你的可执行程序目录
    ]
    
  2. 在my-app的Cargo.toml里添加依赖,写法和路径依赖一致:
    [dependencies]
    foo = { path = "../foo" }
    
  3. 执行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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.03 03:15:40