我正在尝试在Github上使用来自crates的一些Rust库.这是我第一次尝试这样做.从"html"库示例中提取的代码如下所示:
mod interactive_test {
extern crate http;
extern crate url;
use std::os;
use std::str;
use url::Url;
use http::client::RequestWriter;
use http::method::Get;
use http::headers::HeaderEnum;
// ...
}
fn main() {}
Run Code Online (Sandbox Code Playgroud)
错误看起来像这样:
error[E0432]: unresolved import `url::Url`
--> src/main.rs:7:9
|
7 | use url::Url;
| ^^^^^^^^ Did you mean `self::url`?
error[E0432]: unresolved import `http::client::RequestWriter`
--> src/main.rs:9:9
|
9 | use http::client::RequestWriter;
| ^^^^^^^^^^^^^^^^^^^^^^^^^^^ Did you mean `interactive_test::http`?
error[E0432]: unresolved import `http::method::Get`
--> src/main.rs:10:9
|
10 | use http::method::Get;
| ^^^^^^^^^^^^^^^^^ Did you mean `self::http::method`?
error[E0432]: unresolved import `http::headers::HeaderEnum`
--> src/main.rs:11:9
|
11 | use http::headers::HeaderEnum;
| ^^^^^^^^^^^^^^^^^^^^^^^^^ Did you mean `interactive_test::http`?
Run Code Online (Sandbox Code Playgroud)
该Cargo.toml
文件包含
[dependencies.http]
http = "https://github.com/chris-morgan/rust-http"
[dependencies.url]
url = "0.2.7"
Run Code Online (Sandbox Code Playgroud)
并且cargo build
之前找到并获取了HTTP和URL包.
在extern crate http
与extern crate url
线不产生错误; 编译器正在找到包装箱,但这些包装箱似乎不包含预期的符号.如果我添加`extern crate foo',我会收到一个错误,所以检查一下.
这可能是Rust或Cargo如何搜索库的一些问题.~/local
通过--prefix
在安装期间设置参数来安装Rust ,而不是root用户.这可能已经打破了一些东西,尽管Cargo应该处理这个问题.像"hello_world"这样的基本内容很好; 引入外部库不会.
我注意到这cargo update
不会导致从Github重新获取http和url包.文件表明它应该.
版本:
DK.*_*DK. 17
编译器为您提供了所需的答案.
您的extern crate
语句位于模块内,use
语句需要绝对路径.也就是说,当你use url::Url;
在interactive_test
模块内部说,你实际上说的是"使用url::Url
在根模块中定义的",它不是.
你需要做的是在路径前面加上self::
告诉它查看当前模块.您还可以使用super::
访问父模块(如果出现的话).
就个人而言,我通过将所有extern crate
语句放在根模块中来解决这个问题,根模块也可以作为一种程序范围的外部包装列表.
归档时间: |
|
查看次数: |
2955 次 |
最近记录: |