从一个包含main.rs文件的本地crate导入时遇到未解决的导入错误

9

我已将一个库作为子模块包含在我的程序中。其结构如下:

.
├── my_lib/
     ├── Cargo.toml
     └── src/
          ├── lib/
               ├── mod.rs
               └── foo.rs
          └── main.rs
├── src/
     └── main.rs
└── Cargo.toml

在我的程序的 Cargo.toml 文件中,我根据这个答案添加了依赖项。
[dependencies]
my_lib = { path = "./my_lib" }

然而我不能在我的程序中使用这个库,因为我对 Rust 还比较陌生,而这个导入系统对我来说非常困惑。我已经在 main.rs 中尝试过了:

use my_lib::foo;

但是我遇到了一个“未解决的导入 'my_lib'”错误。

3
为什么 my_lib 的源代码不直接放在 my_lib/src 目录下?我期望在 my_lib/src/lib.rs 中找到它。那个 lib/ 目录是什么? - Denys Séguret
很难回答你的问题,因为它不包括一个MRE。我们无法确定Cargo.toml文件的内容。您也没有显示my_lib内部的任何Rust文件(及其内容)。如果您尝试在全新的Cargo项目中复制错误,然后[编辑]您的问题,包括额外的信息,那么我们帮助您会更容易。您可以使用Rust-specific MRE tips来减少在此处发布原始代码。谢谢! - Shepmaster
以下编辑:一个库通常有一个lib.rs文件,而不是一个main.rs文件。这可能是你的第一个问题。 - Denys Séguret
1个回答

7
一个crate只能是库或可执行文件,不能同时拥有两者。你的my_lib包含了一个main.rs文件,这意味着Cargo会将其视为可执行文件。你无法从一个可执行文件中导入内容。
你需要重新组织你的代码。也许你实际上想让my_lib成为一个库,在这种情况下,它应该有一个顶层的lib.rs文件。你可能想要:
  • 删除my_lib/src/main.rs
  • my_lib/src/lib/mod.rs移动到my_lib/src/lib.rs
  • my_lib/src/lib/foo.rs移动到my_lib/src/foo.rs
另请参见:

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接