对于新手Ruster来说,最绝望的就是crate找不到了,use of undeclared crate or modulemaybe a missing crate?

use of undeclared crate or module

在workspace方式组织的项目中,遇到了

error[E0433]: failed to resolve: use of undeclared crate or module db_schema
–> main/src/main.rs:2:9
|
2 | use db_schema::strategy::todolist;
| ^^^^^^^^^ use of undeclared crate or module db_schema

工程组织目录如下:
有三个package,分别是main、dao/db_schema和dao/db_queries

[workspace]
members = ["main","dao/db_schema","dao/db_queries"
]

在main的Cargo.toml文件里,已经写明db_schema和db_queries的依赖:

[dependencies]
diesel = { version = "1.4.6", features = ["mysql", "chrono", "bigdecimal"] }
dotenv = "0.15.0"
chrono = { version = "0.4.19", features = ["serde"] }
bigdecimal = "*"
db_schema =    { path = "../dao/db_schema"}
db_queries =  { path = "../dao/db_queries"}

并且在lib.rs中指明了

pub mod strategy;
pub mod config;
pub mod schema;

在mod.rs里:

pub mod the_masked_one;
pub mod todolist;

但是在根目录下运行cargo build时报错

use of undeclared crate or module db_schema

根据官方文档:
https://doc.rust-lang.org/book/ch14-03-cargo-workspaces.html
入门级

https://doc.rust-lang.org/cargo/reference/workspaces.html
更特别

并且自己又写了个测试工程(只包含main和schema),正当绝望时,在workspace的Cargo.toml里,加上db_schema作为依赖,搞定。现在workspace级别的Cargo.toml:

[package]
name = "lucky"
version = "0.0.1"
edition = "2018"[workspace]
members = ["main","dao/db_schema","dao/db_queries"][[bin]]
name = "luckyapp"
path = "main/src/main.rs"[dependencies]
db_schema =    { path = "./dao/db_schema"} // 这里,成功解决了问题
db_queries =  { path = "./dao/db_queries"}

但是我的测试工程就不需要这两句。测试工程的Cargo.toml

[workspace]
members = ["maina","dao/schema",
]

对比后发现,问题出在workspace的Cargo.toml上。如果在这个Cargo.toml里加上[package][[bin]]标签([package]编译提示必须要有[[bin]]),就必须加上[dependencies]标签,并且把main.rs用到的所有依赖写在这里,相当于main.rs自己所在的package被workspace级别的Cargo.toml override了。即使main.rs所在package的Cargo.toml的dependency完美,也不行。

maybe a missing crate?

error[E0432]: unresolved import crate::schema
–> dao\db_schema\src\strategy\todolist.rs:16:12
|
16 | use crate::schema::todo_list;
| ^^^^^^ maybe a missing crate schema?

原因,在db_schema这个package的lib.rs里,我虽然写上了所有lib.rs的晚辈,但是唯独把它姐妹schema.rs漏掉了,所以加上:

pub mod strategy;
pub mod config;
pub mod schema;  // 一开始漏掉了这句

其他的情况,见解答:
https://stackoverflow.com/questions/61849216/including-an-internal-module-produces-maybe-a-missing-crate-module2
总结就是,外部要使用的模块需要声明,在每个模块目录的mod.rs里,lib.rs对于package的作用就像mod.rs。

.
├── config
│   └── mod.rs
├── lib.rs
├── schema.rs
└── strategy├── mod.rs└── todolist.rs2 directories, 5 files
$ cat config/mod.rs
$ cat strategy/mod.rs
pub mod todolist;
$ cat lib.rs
pub mod strategy; // 目录
pub mod config;   // 目录
pub mod schema;   // schema.rs

Rust use of undeclared crate or module和maybe a missing crate?相关推荐

  1. vue启动报错!Module build failed: Error: Missing binding D:\WorkSpace\vue\OfficeSuite\OfficeFrontend\node

    报错信息如下: This usually happens because your environment has changed since running `npm install`. Run ` ...

  2. Module build failed: Error: Missing binding

    npm run dev启动前端工程以后终端出现超长报错,如下: > shop@2.4.0 dev > vue-cli-service serveINFO Starting developm ...

  3. Vue 项目运行失败 Module build failed: Error: Missing binding

    思路 通过报错信息,可以看出核心问题在于,依赖文件里找不到Sass文件,这个提示我们要重新安装Sass 1. 通过cd切换到当前项目的依赖文件夹下,也就是node_modules文件,然后运行命令安装 ...

  4. Rust之包,箱和模块管理(四):用use关键字引用其他包

    开发环境 Windows 10 Rust 1.63.0 VS Code 1.70.2 项目工程 这里继续沿用上次工程rust-demo 用use关键字将路径带入范围 不得不写出调用函数的路径可能会感到 ...

  5. Rust 1.31正式发布,首次引入Rust 2018新功能

    Rust 1.31是第一个实现了Rust 2018独有新功能并且不保证与现有代码库兼容的版本.Rust 2018相关工作正在进行中,而Rust 1.31只是整个三年开发周期的开始,这个开发周期将对这门 ...

  6. Rust 入坑指南 | CSDN 博文精选

    作者 | Jackyzhe 责编 | 屠敏 出品 | CSDN(ID:CSDNnews) 随着我们的坑越来越多,越来越大,我们必须要对各种坑进行管理了.Rust为我们提供了一套坑务管理系统,方便大家有 ...

  7. Rust 学习3, 枚举,集合

    Option枚举 Option定义于标准库中,并且会与导入(我们不需要主动引入), 描述了某个值可能存在(某种类型)或不存在的情况 // 4月16日每日一题 //给定一个整数 n ,返回 可表示为两个 ...

  8. rust php 扩展,在PHP程序中使用Rust扩展的方法_PHP

    C或PHP中的Rust 我的基本出发点就是写一些可以编译的Rust代码到一个库里面,并写为它一些C的头文件,在C中为被调用的PHP做一个拓展.虽然并不是很简单,但是很有趣. Rust FFI(fore ...

  9. rust php 扩展,在PHP程序中使用Rust扩展的方法_php技巧

    C或PHP中的Rust 我的基本出发点就是写一些可以编译的Rust代码到一个库里面,并写为它一些C的头文件,在C中为被调用的PHP做一个拓展.虽然并不是很简单,但是很有趣. Rust FFI(fore ...

  10. rust放置木箱转向_rust笔记五 - cyper的个人空间 - OSCHINA - 中文开源技术交流社区...

    http://doc.rust-lang.org/guide.html#crates-and-modules 15 crates和modules 一个木箱是一个独立的编译单元,可以包含一个module ...

最新文章

  1. video标签支持获取rtsp流么_Flask教程(二十二)在浏览器中播放rtsp实时流
  2. 清除messages
  3. 学python需要什么文化基础-和尧名大叔一起从0开始学Python编程-循环
  4. 关于equals和hashcode问题
  5. C#如何判断质数(转)
  6. 解决数据库Can't connect to MySQL server on 'localhost' (10061)的问题
  7. 查找表_leetcode454
  8. Alibaba Fastjson 入门详细教程
  9. 半导体PN结的工作原理
  10. MIMO与Beamforming技术学习
  11. 权重股启动意味着什么
  12. Python爬虫系列之全国邮编区号爬取
  13. RSE2021/云检测:Automatic cloud and cloud shadow detection in tropical areas用于PlanetScope热带地区自动云和云阴影检测
  14. CSS属性vertical-align详解(CSS之五)
  15. 【17 提高 1】 给
  16. 移动智能与终端安全防护
  17. 使用局域网IP地址作为小程序的测试IP
  18. 在家无聊就重装个系统吧 三分钟教你重装安装系统
  19. 英语常用的62个英语句型,学英语须掌握
  20. C#实现物体尺寸测量(利用坐标转换)

热门文章

  1. matlab处理采集的声音数据
  2. docker容器满了,如何清理内存
  3. 不限专业和工作年限就能报考的证书有哪些?
  4. Meatycake,51nod2117,树状数组
  5. word自动更正关闭_如何在OS X中关闭自动更正文本替换
  6. 重磅!中国首家互联网银行联手腾讯、华为各大APP,最高5万额度,疯狂提额100亿!!!...
  7. UCF动作识别的数据集及处理(pytorch)
  8. marked转换html失败,JavaScript使用marked.js在线Markdown转HTML
  9. 彻底解决unable to find valid certification path to requested target
  10. 赵小楼《天道》《遥远的救世主》深度解析(29)优秀的传统文化和弱势思想观念的转变