compiler-errors - 如何添加外部包并在 Rust 编译器中运行?

标签 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..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 中有自己的设置。必须尊重。一些 crate 甚至有一个需要编译和运行的构建脚本(libc 是这个依赖树中的一个例子)。

    或者,你可以把
    [dependencies]
    rand = "0.7.3"
    

    在您的 Cargo.toml并运行 cargo build .你的选择。 Cargo 是 Rust 最好的东西之一,所以我建议你使用它。

    附言看看究竟是什么cargo正在做,跑cargo clean删除任何已经编译的依赖项。然后运行 ​​cargo build --verbose (或者 cargo build -vv 如果你很勇敢的话)。你会看到所有传递给 rustc 的标志,运行的脚本和其他一切。

    关于compiler-errors - 如何添加外部包并在 Rust 编译器中运行?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59915954/

    相关文章:

    module - 如何从 `src` 目录之外的目录导入模块?

    rust - 无法加载依赖 list

    c - 为什么使用libc阻止正常链接我的程序?

    c++ - C : x86 Intel Intrinsics usage of _mm_log2_ps() -> error: incompatible type 'int' ?

    C++编译错误: cannot convert parameter 1 from 'DateTimeAndZone' to 'const int'

    c - 警告 :"initialization makes pointer from integer without a cast in c

    compiler-errors - 为什么我不会在未使用的局部变量上出现编译器错误?

    linux - 如何为 Raspberry Pi Zero W 交叉编译 Rust 代码

    docker - SSL 证书验证适用于 Docker,而不适用于 Kubernetes

    Rust 集成测试无法 `use` 库