【问题标题】:How to add external packages and run in rust compiler?如何添加外部包并在 rust 编译器中运行?
【发布时间】:2020-05-11 22:22:53
【问题描述】:

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

【问题讨论】:

    标签: compiler-errors rust rust-cargo rust-crates


    【解决方案1】:

    这在没有 Cargo 的情况下是可能的,但你必须做它通常为你做的事情。

    1. 下载所有依赖项。
    2. 使用正确的标志编译所有带有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 个依赖项中的每一个都执行此操作,并且所有这些依赖项都有自己的外部依赖项。您还需要弄清楚编译它们的正确顺序。

    此外,有些箱子在其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 的所有标志、运行的脚本以及其他所有内容。

    【讨论】:

      【解决方案2】:

      我想扩展@SCappella 的答案。我也鼓励你使用cargo。如果您熟悉 JS、PHP 或 Python 等其他语言的包管理器,您可能会对 cargo edit 感兴趣。

      它允许您在 CLI 中运行命令cargo add rand(最新版本)、cargo add rand@0.7.3(特定版本)、cargo upgrade rand(仅升级rand)、cargo upgrade(升级所有依赖项)而不是编辑@ 987654329@直接存档。

      要安装它,请运行 cargo install cargo-edit,然后阅读 documentation on the website 了解如何使用它。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2012-11-17
        • 1970-01-01
        • 1970-01-01
        • 2022-01-04
        • 2012-04-02
        相关资源
        最近更新 更多