如何在 Rust 编译器中添加外部包和 运行?
How to add external packages and run in rust compiler?
我正在使用 Rust 编译和构建示例程序。我选择 rustc
而不是 cargo
进行编译,因为它是一个简单的个人测试项目。到目前为止,使用 rustc
编译和构建可执行文件工作正常,但是当我尝试添加外部 rand
包时,它给了我这个错误
1 | extern crate rand;
| ^^^^^^^^^^^^^^^^^^ can't find crate
这是完整代码
extern crate rand;
use rand::Rng;
fn main() {
for x in 1..11 {
let random_number = rand::thread_rng()
.gen_range(1, 101);
println!("{} -> {}", x, random_number)
}
}
如何使用 rustc
添加外部包和 运行?
这在没有 Cargo 的情况下是可能的,但你必须按照它通常为你做的事情去做。
- 下载所有依赖项。
- 使用正确的标志编译
rustc
的所有依赖项。
rand v0.7.3
├── getrandom v0.1.14
│ ├── cfg-if v0.1.10
│ └── libc v0.2.66
├── libc v0.2.66 (*)
├── rand_chacha v0.2.1
│ ├── c2-chacha v0.2.3
│ │ └── ppv-lite86 v0.2.6
│ └── rand_core v0.5.1
│ └── getrandom v0.1.14 (*)
└── rand_core v0.5.1 (*)
rand
还不错,只有 8 个传递依赖项(包括 rand
本身,不包括重复项)。尽管如此,您仍必须转到 crates.io 或 github 并为每个下载正确版本的源代码。
然后是编译。编译您自己的二进制文件所需要做的最少工作是 rustc -L dependency=/path/to/dependency/dir src/main.rs
。但请记住,您必须为 8 个依赖项中的每一个执行此操作,并且所有这些依赖项都有自己的外部依赖项。您还需要找出编译它们的正确顺序。
另外,有些 crate 在 Cargo.toml
中有自己的设置,必须遵守这些设置。有些箱子甚至有一个需要编译的构建脚本和 运行(libc
是这个依赖树中的一个例子)。
或者,您可以只输入
[dependencies]
rand = "0.7.3"
在您的 Cargo.toml
和 运行 cargo build
中。你的选择。 Cargo 是 Rust 最好的东西之一,所以我建议你使用它。
P.S。要查看 cargo
究竟在做什么,请 运行 cargo clean
删除任何已编译的依赖项。然后 运行 cargo build --verbose
(或者 cargo build -vv
,如果你够勇敢的话)。您将看到传递给 rustc
的所有标志、获得 运行 的脚本以及其他所有内容。
我想扩展@SCappella 的回答。我鼓励您也使用 cargo
。如果您熟悉其他语言的包管理器,例如 JS、PHP 或 Python,您可能会对 cargo edit.
感兴趣
它允许您运行命令cargo add rand
(最新版本),cargo add rand@0.7.3
(特定版本),cargo upgrade rand
(仅升级rand
), cargo upgrade
(升级所有依赖项)在 CLI 中而不是直接编辑 Cargo.toml
文件。
要安装它,运行 cargo install cargo-edit
,然后阅读 documentation on the website 如何使用它。
我正在使用 Rust 编译和构建示例程序。我选择 rustc
而不是 cargo
进行编译,因为它是一个简单的个人测试项目。到目前为止,使用 rustc
编译和构建可执行文件工作正常,但是当我尝试添加外部 rand
包时,它给了我这个错误
1 | extern crate rand;
| ^^^^^^^^^^^^^^^^^^ can't find crate
这是完整代码
extern crate rand;
use rand::Rng;
fn main() {
for x in 1..11 {
let random_number = rand::thread_rng()
.gen_range(1, 101);
println!("{} -> {}", x, random_number)
}
}
如何使用 rustc
添加外部包和 运行?
这在没有 Cargo 的情况下是可能的,但你必须按照它通常为你做的事情去做。
- 下载所有依赖项。
- 使用正确的标志编译
rustc
的所有依赖项。
rand v0.7.3
├── getrandom v0.1.14
│ ├── cfg-if v0.1.10
│ └── libc v0.2.66
├── libc v0.2.66 (*)
├── rand_chacha v0.2.1
│ ├── c2-chacha v0.2.3
│ │ └── ppv-lite86 v0.2.6
│ └── rand_core v0.5.1
│ └── getrandom v0.1.14 (*)
└── rand_core v0.5.1 (*)
rand
还不错,只有 8 个传递依赖项(包括 rand
本身,不包括重复项)。尽管如此,您仍必须转到 crates.io 或 github 并为每个下载正确版本的源代码。
然后是编译。编译您自己的二进制文件所需要做的最少工作是 rustc -L dependency=/path/to/dependency/dir src/main.rs
。但请记住,您必须为 8 个依赖项中的每一个执行此操作,并且所有这些依赖项都有自己的外部依赖项。您还需要找出编译它们的正确顺序。
另外,有些 crate 在 Cargo.toml
中有自己的设置,必须遵守这些设置。有些箱子甚至有一个需要编译的构建脚本和 运行(libc
是这个依赖树中的一个例子)。
或者,您可以只输入
[dependencies]
rand = "0.7.3"
在您的 Cargo.toml
和 运行 cargo build
中。你的选择。 Cargo 是 Rust 最好的东西之一,所以我建议你使用它。
P.S。要查看 cargo
究竟在做什么,请 运行 cargo clean
删除任何已编译的依赖项。然后 运行 cargo build --verbose
(或者 cargo build -vv
,如果你够勇敢的话)。您将看到传递给 rustc
的所有标志、获得 运行 的脚本以及其他所有内容。
我想扩展@SCappella 的回答。我鼓励您也使用 cargo
。如果您熟悉其他语言的包管理器,例如 JS、PHP 或 Python,您可能会对 cargo edit.
它允许您运行命令cargo add rand
(最新版本),cargo add rand@0.7.3
(特定版本),cargo upgrade rand
(仅升级rand
), cargo upgrade
(升级所有依赖项)在 CLI 中而不是直接编辑 Cargo.toml
文件。
要安装它,运行 cargo install cargo-edit
,然后阅读 documentation on the website 如何使用它。