【发布时间】:2017-06-26 23:06:40
【问题描述】:
根据 Cargo 的documentation,我有一个直接从 GitHub 导入的板条箱:
[dependencies]
libfoo = { git = "ssh://git@github.com/me/libfoo", branch = "dev" }
[lib]
path = "src/rust/lib.rs"
name = "myprj"
crate-type = ["cdylib"]
运行 cargo build 在这里工作正常,Cargo 获取 libfoo 并将其构建在 ~/.cargo 目录中。当我尝试在lib.rs 中使用(导入)它时:
extern crate libfoo; //also tried foo
货物扼流圈:
error[E0463]: can't find crate for `libfoo`
--> src/rust/lib.rs:1:1
|
1 | extern crate libfoo;
| ^^^^^^^^^^^^^^^^^^^^^^^^^^^ can't find crate
有趣的是,当我在 lib.rs 中单击它时,IntelliJ 的 Rust 插件确实找到了箱子——它导航到 ~/.cargo 中的下载源...
在依赖libfoo中,Cargo.toml文件的lib部分被指定为:
[package]
name = "libfoo"
[lib]
name = "foo"
crate-type = ["cdylib"]
我已经尝试了 libfoo 和 foo 的所有排列,看看 Cargo 是否混淆了 lib 名称和包/目录名称。
如果我指定依赖项的本地路径,它也会失败。 (Cargo 编译依赖项,但声称在 lib.rs 中声明/导入时找不到它。)
[dependencies]
libfoo = { path = "/Users/me/dev/libfoo" }
如果我包含来自 git 的 crate 或具有与 [package] 名称相同的 [lib] 名称的文件系统,它可以正常工作。因此,问题似乎出在具有与包 ([package]) 名称不同的库 ([lib]) 名称的箱子上。
如果我从依赖项的 Cargo.toml 文件中删除 [lib] 部分,它会起作用。
更新:如果从libfoo 中删除crate-type = ["cdylib"],则这适用于导入的foo。如果存在,我会收到与 extern crate foo; 相同的错误。
【问题讨论】:
-
try to use it是什么意思?依赖项目是否真的如上句所说的那样构建好? -
另请注意,docs 实际上建议指定来自 GitHub 存储库的依赖项,例如
{ git = "https://github.com/rust-lang-nursery/rand" }。 -
@E_net4 适用于公共存储库,但对于私有存储库,您必须使用 ssh url。它的那部分工作正常。 ssh url 没有记录。
-
libmylib很混乱...请使用更清晰的名称或真实姓名。你有没有试过libmy(我不知道只是一个想法)?
标签: rust rust-cargo