J'essaie de créer un module dans Rust puis de l'utiliser à partir d'un fichier différent. Voici ma structure de fichier:
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
Voici Cargo.toml:
[package]
name = "bitter-oyster"
version = "0.1.0"
authors = ["matthias"]
[dependencies]
C'est main.rs:
extern crate plot;
fn main() {
println!("----");
plot::line::test();
}
C'est lib.rs:
mod plot;
c'est intrigue/mod.rs
mod line;
et ceci est plot/line.rs
pub fn test(){
println!("Here line");
}
Lorsque j'essaie de compiler mon programme en utilisant: cargo run
Je reçois:
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;
Comment compiler mon programme? Pour autant que je sache à partir des documentations en ligne, cela devrait fonctionner, mais ce n'est pas le cas.
Vous rencontrez les problèmes suivants:
vous devez utiliser extern crate bitter_oyster;
dans main.rs
, parce que le binaire produit utilise votre caisse, le binaire ne fait pas partie de celui-ci.
Appelez également bitter_oyster::plot::line::test();
dans main.rs
Au lieu de plot::line::test();
. plot
est un module de la caisse bitter_oyster
, tel que line
. Vous faites référence à la fonction test
avec son nom complet.
Assurez-vous que chaque module est exporté sous le nom complet. Vous pouvez rendre un module public avec le mot clé pub
, comme pub mod plot;
Vous pouvez trouver plus d'informations sur le système de modules de Rust ici: https://doc.Rust-lang.org/book/crates-and-modules.html
Une copie de travail de la structure de votre module est la suivante:
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");
}
Si vous voyez cette erreur:
error[E0463]: can't find crate for `PACKAGE`
|
1 | extern crate PACKAGE;
| ^^^^^^^^^^^^^^^^^^^^^ can't find crate
il se peut que vous n'ayez pas ajouté la caisse souhaitée à la liste des dépendances dans votre Cargo.toml
:
[dependencies]
PACKAGE = "1.2.3"
Voir spécification des dépendances dans les documents Cargo .
Pour ajouter aux réponses données, une bibliothèque compilée comme cdylib
( docs ) peut générer cette erreur lorsque vous essayez de la référencer dans un autre projet. Je l'ai résolu en séparant le code que je souhaitais réutiliser dans un projet lib
normal.