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

问题描述 投票:1回答:2

我正在使用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
2个回答
5
投票

如果没有货运,这是可能的,但是您必须做通常为您做的事。

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


或者,你可以放]

[dependencies]
rand = "0.7.3"

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


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


0
投票

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

它允许您在CLI中运行命令cargo add rand(最新版本),cargo add [email protected](特定版本),cargo upgrade rand(仅升级rand),cargo upgrade(所有依赖项),而不用编辑[C0 ]文件。

© www.soinside.com 2019 - 2024. All rights reserved.