使用 rustc 编译代码时如何调用库目录之外的 Rust 代码?

Pal*_*gam 2 rust

我正在尝试使用以下布局编写一个 Rust 库:

\n\n
.\n\xe2\x94\x9c\xe2\x94\x80\xe2\x94\x80 Cargo.lock\n\xe2\x94\x9c\xe2\x94\x80\xe2\x94\x80 Cargo.toml\n\xe2\x94\x9c\xe2\x94\x80\xe2\x94\x80 examples\n\xe2\x94\x82   \xe2\x94\x94\xe2\x94\x80\xe2\x94\x80 main.rs\n\xe2\x94\x9c\xe2\x94\x80\xe2\x94\x80 src\n\xe2\x94\x82   \xe2\x94\x9c\xe2\x94\x80\xe2\x94\x80 client.rs\n\xe2\x94\x82   \xe2\x94\x94\xe2\x94\x80\xe2\x94\x80 lib.rs\n\xe2\x94\x94\xe2\x94\x80\xe2\x94\x80 target\n    \xe2\x94\x94\xe2\x94\x80\xe2\x94\x80 rls\n        \xe2\x94\x94\xe2\x94\x80\xe2\x94\x80 debug\n            \xe2\x94\x9c\xe2\x94\x80\xe2\x94\x80 build\n            \xe2\x94\x9c\xe2\x94\x80\xe2\x94\x80 deps\n
Run Code Online (Sandbox Code Playgroud)\n\n

client.rs拥有所有代码并且客户端结构是公开的

\n\n

lib.rs包含pub mod client;

\n\n

示例/main.rs

\n\n
extern crate fistrs;\n\nuse fistrs::client::FistClient;\n\nfn main() {\n    let mut client = FistClient::new("localhost", "5575");\n    client.connect();\n}\n
Run Code Online (Sandbox Code Playgroud)\n\n

但当我运行这个时出现错误rustc examples/main.rs

\n\n
extern crate fistrs;\n\nuse fistrs::client::FistClient;\n\nfn main() {\n    let mut client = FistClient::new("localhost", "5575");\n    client.connect();\n}\n
Run Code Online (Sandbox Code Playgroud)\n\n

这是我的Cargo.toml

\n\n
[package]\nname = "fistrs"\nversion = "0.1.0"\nauthors = ["palash25 <npalash25@gmail.com>"]\nedition = "2018"\n\n# See more keys and their definitions at https://doc.rust-lang.org/cargo/reference/manifest.html\n\n[dependencies]\n\n
Run Code Online (Sandbox Code Playgroud)\n

She*_*ter 5

惯用的答案

当我运行这个时rustc examples/main.rs

不要那样做。使用 或cargo run --example maincargo build --example main代替。

也可以看看:

字面答案

当您构建示例时,会涉及两个 crate:

  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
Run Code Online (Sandbox Code Playgroud)

也可以看看: