36

我正在尝试在 Rust 中创建一个模块,然后从不同的文件中使用它。这是我的文件结构:

matthias@X1:~/projects/bitter-oyster$ tree
.
├── Cargo.lock
├── Cargo.toml
├── Readme.md
├── src
│   ├── liblib.rlib
│   ├── lib.rs
│   ├── main.rs
│   ├── main.rs~
│   └── plot
│       ├── line.rs
│       └── mod.rs
└── target
    └── debug
        ├── bitter_oyster.d
        ├── build
        ├── deps
        ├── examples
        ├── libbitter_oyster.rlib
        └── native

8 directories, 11 files

这是 Cargo.toml:

[package]
name = "bitter-oyster"
version = "0.1.0"
authors = ["matthias"]

[dependencies]

这是 main.rs:

extern crate plot;

fn main() {
    println!("----");
    plot::line::test();
}

这是 lib.rs:

mod plot;

这是情节/mod.rs

mod line;

这是 plot/line.rs

pub fn test(){
    println!("Here line");
}

当我尝试使用以下方法编译我的程序时:cargo run我得到:

   Compiling bitter-oyster v0.1.0 (file:///home/matthias/projects/bitter-oyster)
/home/matthias/projects/bitter-oyster/src/main.rs:1:1: 1:19 error: can't find crate for `plot` [E0463]
/home/matthias/projects/bitter-oyster/src/main.rs:1 extern crate plot;

如何编译我的程序?据我从在线文档中可以看出,这应该可以工作,但事实并非如此。

4

3 回答 3

24

如果您看到此错误:

error[E0463]: can't find crate for `PACKAGE`
  |
1 | extern crate PACKAGE;
  | ^^^^^^^^^^^^^^^^^^^^^ can't find crate

可能是您没有将所需的 crate 添加到您的依赖项列表中Cargo.toml

[dependencies]
PACKAGE = "1.2.3"

请参阅Cargo 文档中的指定依赖项

于 2016-12-28T00:14:54.440 回答
20

您有以下问题:

  1. 你必须使用extern crate bitter_oyster;in main.rs,因为生成的二进制文件使用你的 crate,二进制文件不是它的一部分。

  2. 另外,请调用bitter_oyster::plot::line::test();main.rs不是plot::line::test();. plotbitter_oystercrate 中的一个模块,例如line. 您指的是test具有完全限定名称的函数。

  3. 确保每个模块都以完全限定名称导出。您可以使用pub关键字公开模块,例如pub mod plot;

您可以在此处找到有关 Rust 模块系统的更多信息:https ://doc.rust-lang.org/book/crates-and-modules.html

您的模块结构的工作副本如下:

src/main.rs:

extern crate bitter_oyster;

fn main() {
    println!("----");
    bitter_oyster::plot::line::test();
}

src/lib.rs:

pub mod plot;

src/plot/mod.rs:

pub mod line;

src/plot/line.rs:

pub fn test(){
    println!("Here line");
}
于 2015-12-25T16:03:50.913 回答
20

要添加到给定的答案,当您尝试在另一个项目中引用它时,编译为cdylib( docs ) 的库可能会生成此错误。我通过分离我希望在常规lib项目中重用的代码来解决它。

于 2018-04-10T21:17:07.377 回答