I\'m trying to create a module in Rust and then use it from a different file. This is my file structure:
matthias@X1:~/projects/bitter-oyster$ tree
.
├── Car
To add to the given answers, a library compiled as a cdylib
(docs) can generate this error when you try to reference it in another project. I solved it by separating the code I wished to reuse in a regular lib
project.
You have the following problems:
you have to use extern crate bitter_oyster;
in main.rs
, because the produced binary uses your crate, the binary is not a part of it.
Also, call bitter_oyster::plot::line::test();
in main.rs
instead of plot::line::test();
. plot
is a module in the bitter_oyster
crate, such as line
. You are referring to the test
function with its fully qualified name.
Make sure, that every module is exported in the fully qualified name. You can make a module public with the pub
keyword, like pub mod plot;
You can find more information about Rust's module system here: https://doc.rust-lang.org/book/crates-and-modules.html
A working copy of your module structure is as follows:
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");
}
If you see this error:
error[E0463]: can't find crate for `PACKAGE`
|
1 | extern crate PACKAGE;
| ^^^^^^^^^^^^^^^^^^^^^ can't find crate
it could be that you haven't added the desired crate to the dependencies list in your Cargo.toml
:
[dependencies]
PACKAGE = "1.2.3"
See specifying dependencies in the Cargo docs.