web-dev-qa-db-ja.com

Rust木枠が見つかりません

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;

プログラムをコンパイルするにはどうすればよいですか?オンラインのドキュメントからわかる限り、これは機能するはずですが、機能しません。

19
Stein

次の問題があります。

  1. _extern crate bitter_oyster;_を_main.rs_で使用する必要があります。生成されたバイナリはクレートを使用するため、バイナリはその一部ではない。

  2. また、bitter_oyster::plot::line::test();の代わりに_main.rs_でplot::line::test();を呼び出します。 plotは、lineなどの_bitter_oyster_クレートのモジュールです。 test関数を完全修飾名で参照しています。

  3. すべてのモジュールが完全修飾名でエクスポートされていることを確認してください。 _pub mod plot;_のようなpubキーワードを使用してモジュールを公開できます

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");
}
_
17
Tibor Benke

このエラーが表示される場合:

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

Cargo.tomlの依存関係リストに目的のクレートを追加していない可能性があります。

[dependencies]
PACKAGE = "1.2.3"

貨物ドキュメントで依存関係を指定するを参照

13
Andy Hayden

与えられた答えに追加するために、cdylibdocs )としてコンパイルされたライブラリは、別のプロジェクトで参照しようとしたときにこのエラーを生成できます。通常のlibプロジェクトで再利用したいコードを分離することで解決しました。

8
Sebastiaan