链接二进制箱

Linking against binary crate

有一个箱子我想用作我自己的一些代码的库(speedtest-rs 具体来说,但这并不重要)。但是,每当我尝试使用这个 crate 时,编译器都不想很好地使用它。

$ cargo build
   Compiling my-project v0.1.0 (/home/nick/Documents/code/my-project)
error[E0432]: unresolved import `speedtest_rs`
 --> src/main.rs:1:5
  |
1 | use speedtest_rs::*;
  |     ^^^^^^^^^^^^ use of undeclared type or module `speedtest_rs`

查看 Rust book,似乎二进制文件和库 crae 之间存在区别

The rand crate is a library crate which contains code intended to be used in other programs

一些谷歌搜索告诉我二进制箱只有一个额外的 link 步骤,所以我 应该 能够 link 对付它们,对吧?我知道很多 Rust 包中都有库和二进制文件,但是当作者似乎不遵循这种模式时你会怎么做?

Some googling has shown me that binary crates just have an extra link step, so I should be able to link against them, right?

没有。没那么简单。再加上这个额外的步骤会创建一个可执行文件而不是一个库文件。可执行文件不能用作库。

I know a lot of Rust packages have both a library and a binary in them, but what do you do when an author does not seem to follow this pattern?

您可以:

  • 请他们在 GitHub 上发布图书馆。
  • fork the crate 并制作你自己的库(你可以这样做,因为它是使用通常的双重“Apache 许可证,2.0 版”+“MIT”许可证发布的)。

没有一种自动化的方法可以将二进制 crate 用作库,特别是因为:

  • Rust 不会生成库。
  • 由于 crate 缺少 src/lib.rs 文件,因此没有导出任何内容。这类似于将箱子中的所有物品设为私有。你将无法使用任何东西。