Compiler errors 如何添加外部包并在rust编译器中运行?

Compiler errors 如何添加外部包并在rust编译器中运行?,compiler-errors,rust,rust-cargo,rust-crates,Compiler Errors,Rust,Rust Cargo,Rust Crates,我正在使用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..

我正在使用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
下运行?

这在没有货物的情况下是可能的,但您必须执行它通常为您执行的操作

  • 下载所有依赖项
  • 使用正确的标志使用
    rustc
    编译所有依赖项
  • rand v0.7.3
    ├── getrandom v0.1.14
    │   ├── cfg如果v0.1.10
    │   └── libc v0.2.66
    ├── libc v0.2.66(*)
    ├── rand_chacha v0.2.1
    │   ├── c2 chacha v0.2.3
    │   │   └── ppv-86 v0.2.6
    │   └── 兰德大学核心v0.5.1
    │       └── getrandom v0.1.14(*)
    └── 兰德大学核心v0.5.1(*)
    
    rand
    还不错,只有8个可传递的依赖项(包括
    rand
    本身,不包括重复项)。尽管如此,您仍必须转到crates.io或github,并为每个版本下载正确版本的源代码

    然后是编译。编译自己的二进制文件所需做的最低要求是
    rustc-L dependency=/path/to/dependency/dir src/main.rs
    。但是请记住,您必须对8个依赖项中的每一个都这样做,并且所有这些依赖项都有自己的外部依赖项。您还需要确定编译它们的正确顺序

    另外,一些板条箱在其
    Cargo.toml
    中有自己的设置,必须遵守这些设置。有些板条箱甚至有一个需要编译和运行的构建脚本(
    libc
    就是这个依赖关系树中的一个例子)


    或者,你可以把

    [dependencies]
    rand = "0.7.3"
    
    Cargo.toml
    中运行
    Cargo build
    。你的选择。货物是生锈最好的东西之一,所以我建议你用它



    另外,要查看
    cargo
    到底在做什么,请运行
    cargo clean
    删除任何已编译的依赖项。然后运行
    cargo build--verbose
    (或者
    cargo build-vv
    ,如果你很勇敢的话)。您将看到传递给
    rustc
    的所有标志、运行的脚本以及其他所有内容。

    我想进一步介绍@SCappella的答案。我鼓励您也使用
    货物
    。如果您熟悉来自其他语言(如JS、PHP或Python)的包管理器,您可能会对它感兴趣

    它允许您运行命令
    cargo add rand
    (最新版本),
    cargo addrand@0.7.3
    (特定版本),
    货物升级rand
    (仅升级
    rand
    ),
    货物升级
    (升级所有依赖项)在CLI中,而不是直接编辑
    cargo.toml
    文件

    要安装它,请运行
    cargo install cargo edit
    ,然后阅读有关如何使用它的说明