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中有其自己的设置,必须遵守。一些包装箱甚至具有需要编译和运行的构建脚本(libc是此依赖关系树中的一个示例)。

    或者,您可以将
    [dependencies]
    rand = "0.7.3"
    

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

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

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

    相关文章:

    c++ - 编译器找不到头文件中声明的函数

    Rust:如何指定一种可能的返回类型?

    rust - 如何在 Cargo 配置中为构建和测试指定不同的默认目标?

    rust - 如何使 cargo 保存分析?

    testing - 运行 Rust cargo test 并让测试运行器将任何日志输出显示到控制台 stdout 或 stderr 的方法有哪些?

    c# - 将Gridview导出到Excel文件-错误

    java - 二进制算术运算

    boost - 使用 Winsock bind() 调用 Boost 时出现 "Could not deduce template argument"错误

    mysql - 如何将 mysql::Conn 包含在lazy_static 宏中?

    rust - 是否有可能在 Rust 的不同源文件中有一个模块