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

Rust项目中lib.rs无法导入同目录app.rs模块如何解决

Rust 同目录下lib.rs导入app.rs模块报错解决方案

问题根源

  • Rust 项目中 src/main.rs 是二进制 crate 的根,src/lib.rs 是库 crate 的根,两者属于完全独立的模块树,不存在从属关系
  • 在 lib.rs 中直接写 mod app; 时,Rust 会默认去 src/lib/ 目录下查找对应模块文件,因此会抛出找不到文件的报错
  • 你之前在 main.rs 中写 mod lib; 属于错误用法,相当于把 lib.rs 当成了二进制 crate 下的普通子模块,没有用到库 crate 的能力,正确的库内容引用方式是直接通过包名导入,比如你的包名为 my_project 就写 use my_project::xxx;

解决方案

方案1:将app.rs作为库crate的模块(推荐)

如果 app.rs 属于通用公共逻辑,优先归到库侧管理:

  1. 在 src/ 目录下新建 lib 文件夹,将 app.rs 移动到 src/lib/app.rs
  2. 在 src/lib.rs 中添加模块声明:pub mod app;,可按需写 pub use app::*; 直接导出app内的公开方法
  3. 删除 main.rs 中原有的 mod lib;、mod app; 声明,所有对库、app模块的引用都通过包名导入,比如你的Cargo.toml中name = "my_project",就写:
// main.rs 中导入app的公开方法
use my_project::app::your_public_function;

方案2:app.rs作为二进制crate的模块,公共逻辑抽离到库

如果 app.rs 是仅二进制侧使用的业务逻辑,不要在 lib.rs 中导入它:

  • 把需要在库侧调用的公共逻辑抽离出来放到库的模块中,二进制侧和app.rs统一从库侧导入公共能力,不要反过来让库依赖二进制的模块
  • 仅在 src/main.rs 中添加 mod app; 声明,即可正常使用app内的方法

补充:不推荐的临时解决方案

如果你一定要把app.rs放在src/根目录同时给lib.rs导入,可以在lib.rs里手动指定模块路径:

#[path = "./app.rs"]
mod app;

但这种写法会破坏Rust模块树和目录的默认映射规则,后期维护成本高,不推荐长期使用。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.05 10:27:04