2015-12-25 11 views
7

Sto provando a creare un modulo in Rust e quindi utilizzarlo da un altro file. Questa è la mia struttura di file:Rust non trova la cassa

[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 

Questo è Cargo.toml:

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

[dependencies] 

Questo è main.rs:

extern crate plot; 

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

Questo è lib.rs:

mod plot; 

questo è plot/mod.rs

mod line; 

e questo è Trama/line.rs

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

Quando provo a compilare il mio programma utilizzando: cargo run ottengo:

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; 

Come compilo il mio programma? Per quanto posso dire dalle documentazioni online questo dovrebbe funzionare, ma non è così.

risposta

11

Sono disponibili le seguenti problematiche:

  1. bisogna usare extern crate bitter_oyster; in main.rs, perché il prodotto binario usa vostra cassa, il binario non è una parte di esso.

  2. Inoltre, chiamare bitter_oyster::plot::line::test(); in main.rs anziché plot::line::test();. plot è un modulo nella cassa bitter_oyster, ad esempio line. Ti stai riferendo alla funzione test con il suo nome completo.

  3. Assicurarsi che ogni modulo sia esportato con il nome completo. Si può fare un modulo pubblico con la parola chiave pub, come pub mod plot;

È possibile trovare maggiori informazioni sul sistema di Rust modulo qui: https://doc.rust-lang.org/book/crates-and-modules.html

Una copia di lavoro della vostra struttura del modulo è la seguente:

src/main.rs:

extern crate bitter_oyster; 

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

src/lib.rs:

pub mod plot; 

src/trama/mod.rs:

pub mod line; 

src/trama/line.rs:

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

Se viene visualizzato questo errore:

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

potrebbe essere che non hai aggiunto la cassa desiderato alla lista delle dipendenze nella tua Cargo.toml:

[dependencies] 
PACKAGE = "1.2.3" 

Vedi specifying dependencies in the Cargo docs.

+1

Nota: su Google questo errore ti invia qui, quindi spero che questo aiuti qualcun altro! –

+0

Come si determina quale versione di una cassa specificare? C'è sempre un posto dove cercare note di rilascio che possano dare un indizio? –

+0

@JamesJones solitamente quello che dice su crates.io sarà quello che vuoi (l'ultimo) https://crates.io/crates/serde, puoi anche vedere le dipendenze ecc. –