Eka*_*Eka 3 compiler-errors rust rust-crates rust-cargo
我正在使用 rust 编译和构建一个示例程序。我选择rustc
而不是cargo
编译,因为它是一个简单的个人测试项目。到目前为止,rustc
用于编译和构建可执行文件工作正常,但是当我尝试添加外部rand
包时,它给了我这个错误
1 | extern crate rand;
| ^^^^^^^^^^^^^^^^^^ can't find crate
Run Code Online (Sandbox Code Playgroud)
这是完整的代码
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)
}
}
Run Code Online (Sandbox Code Playgroud)
如何添加外部包并运行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 (*)
Run Code Online (Sandbox Code Playgroud)
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"
Run Code Online (Sandbox Code Playgroud)
在您的Cargo.toml
运行中cargo build
。你的选择。Cargo 是 Rust 最好的东西之一,所以我建议你使用它。
PS 要查看到底cargo
在做什么,请运行cargo clean
以删除任何已编译的依赖项。然后跑cargo build --verbose
(或者cargo build -vv
如果你很勇敢的话)。您将看到传递给 的所有标志、rustc
运行的脚本以及其他所有内容。
归档时间: |
|
查看次数: |
633 次 |
最近记录: |