Rust 找不到箱子
Rust can't find crate
我正在尝试在 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;
这是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;
如何编译我的程序?据我从在线文档中得知,这应该有效,但实际上无效。
您遇到以下问题:
你必须在 main.rs
中使用 extern crate bitter_oyster;
,因为生成的二进制文件 使用 你的箱子,二进制文件不是一部分
此外,在 main.rs
中调用 bitter_oyster::plot::line::test();
而不是 plot::line::test();
。 plot
是 bitter_oyster
crate 中的一个模块,例如 line
。您指的是具有完全限定名称的 test
函数。
确保每个模块都以完全限定名称导出。您可以使用 pub
关键字创建模块 public,例如 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");
}
如果您看到此错误:
error[E0463]: can't find crate for `PACKAGE`
|
1 | extern crate PACKAGE;
| ^^^^^^^^^^^^^^^^^^^^^ can't find crate
可能是您还没有将所需的 crate 添加到 Cargo.toml
:
的依赖项列表中
[dependencies]
PACKAGE = "1.2.3"
为了补充给定的答案,编译为 cdylib
(docs) 的库可能会在您尝试在另一个项目中引用它时生成此错误。我通过分离我希望在常规 lib
项目中重用的代码来解决它。
我正在尝试在 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;
这是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;
如何编译我的程序?据我从在线文档中得知,这应该有效,但实际上无效。
您遇到以下问题:
你必须在
main.rs
中使用extern crate bitter_oyster;
,因为生成的二进制文件 使用 你的箱子,二进制文件不是一部分此外,在
main.rs
中调用bitter_oyster::plot::line::test();
而不是plot::line::test();
。plot
是bitter_oyster
crate 中的一个模块,例如line
。您指的是具有完全限定名称的test
函数。确保每个模块都以完全限定名称导出。您可以使用
pub
关键字创建模块 public,例如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");
}
如果您看到此错误:
error[E0463]: can't find crate for `PACKAGE`
|
1 | extern crate PACKAGE;
| ^^^^^^^^^^^^^^^^^^^^^ can't find crate
可能是您还没有将所需的 crate 添加到 Cargo.toml
:
[dependencies]
PACKAGE = "1.2.3"
为了补充给定的答案,编译为 cdylib
(docs) 的库可能会在您尝试在另一个项目中引用它时生成此错误。我通过分离我希望在常规 lib
项目中重用的代码来解决它。