Как вызвать код Rust вне каталога библиотеки при компиляции кода с использованием rustc? - PullRequest
2 голосов
/ 30 сентября 2019

Я пытаюсь написать библиотеку Rust с таким макетом:

.
├── Cargo.lock
├── Cargo.toml
├── examples
│   └── main.rs
├── src
│   ├── client.rs
│   └── lib.rs
└── target
    └── rls
        └── debug
            ├── build
            ├── deps

client.rs содержит весь код, а структура клиента общедоступна

lib.rs содержит pub mod client;

examples / main.rs :

extern crate fistrs;

use fistrs::client::FistClient;

fn main() {
    let mut client = FistClient::new("localhost", "5575");
    client.connect();
}

но я получаю ошибку при запуске этого rustc examples/main.rs

 --> examples/main.rs:1:1
  |
1 | extern crate fistrs;
  | ^^^^^^^^^^^^^^^^^^^^ can't find crate

Вотмой Cargo.toml

[package]
name = "fistrs"
version = "0.1.0"
authors = ["palash25 <npalash25@gmail.com>"]
edition = "2018"

# See more keys and their definitions at https://doc.rust-lang.org/cargo/reference/manifest.html

[dependencies]

1 Ответ

4 голосов
/ 30 сентября 2019

Идиоматический ответ

, когда я запускаю это rustc examples/main.rs

Не делайте этого. Вместо этого используйте cargo run --example main или cargo build --example main.

См. Также:

Дословный ответ

При создании примера участвуют два ящика:

  1. Ящик библиотеки
  2. Ящик для примера

Вам понадобится собрать ящик для библиотеки, а затем сообщить компилятору об этом ящике при создании ящика для примера. Это чрезвычайно утомительная работа, которую обычно никто не хочет делать. Это будет выглядеть примерно так:

$ rustc --edition=2018 --crate-type=rlib --crate-name library_example src/lib.rs -o libmy_library.rlib
$ rustc --edition=2018 --extern library_example=libmy_library.rlib examples/main.rs

См. Также:

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...