2015-12-25 11 views
7

Próbuję utworzyć moduł w Rust, a następnie użyć go z innego pliku. To jest moja struktura plików:Rust nie może znaleźć skrzynki

[email protected]:~/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 

to Cargo.toml:

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

[dependencies] 

Jest main.rs:

extern crate plot; 

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

Jest lib.rs:

mod plot; 

to jest działka/mod.rs

mod line; 

a to Działka/line.rs

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

Kiedy próbuję skompilować mój program przy użyciu: cargo run uzyskać:

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; 

Jak mogę skompilować mój program? O ile mogę powiedzieć z dokumentacji online, to powinno działać, ale tak nie jest.

Odpowiedz

11

Dostępne są następujące problemy:

  1. trzeba użyć extern crate bitter_oyster; w main.rs, ponieważ produkowane binarny wykorzystuje swoją skrzynkę, binarny nie jest jego częścią.

  2. Zadzwoń pod bitter_oyster::plot::line::test(); w main.rs zamiast plot::line::test();. plot to moduł w skrzyni bitter_oyster, na przykład line. Masz na myśli funkcję test z pełną nazwą.

  3. Upewnij się, że każdy moduł jest eksportowany w pełnej nazwie. Można zrobić moduł do publicznej wiadomości ze słowem kluczowym pub, jak pub mod plot;

można znaleźć więcej informacji na temat systemu Rust modułu tutaj: https://doc.rust-lang.org/book/crates-and-modules.html

Kopia robocza strukturze modułu jest następująca:

src/main.rs: lib.rs

extern crate bitter_oyster; 

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

src /:

pub mod plot; 

src/Działka/mod.rs:

pub mod line; 

src/Działka/linii.RS:

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

Jeśli widzisz ten błąd:

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

może być, że nie dodałeś żądaną skrzynkę na listy zależności w swojej Cargo.toml:

[dependencies] 
PACKAGE = "1.2.3" 

Zobacz specifying dependencies in the Cargo docs.

+1

Uwaga: ten błąd jest wysyłany tutaj, więc mam nadzieję, że pomoże to komuś innemu! –

+0

Jak określić, która wersja skrzynki ma zostać określona? Czy zawsze jest miejsce na szukanie informacji o wydaniu, które dałoby wskazówkę? –

+0

@JamesJones zwykle to, co mówi na crates.io będzie to, co chcesz (najnowsze) https://crates.io/crates/serde, możesz również zobaczyć zależności itp. –