I have a crate that is imported straight off of GitHub, as per Cargo's documentation:
[dependencies]
libfoo = { git = "ssh://[email protected]/me/libfoo", branch = "dev" }
[lib]
path = "src/rust/lib.rs"
name = "myprj"
crate-type = ["cdylib"]
Running cargo build
works fine here, Cargo fetches libfoo
and builds it in the ~/.cargo
directory. When I try to use (import) it in lib.rs
:
extern crate libfoo; //also tried foo
Cargo chokes:
error[E0463]: can't find crate for `libfoo`
--> src/rust/lib.rs:1:1
|
1 | extern crate libfoo;
| ^^^^^^^^^^^^^^^^^^^^^^^^^^^ can't find crate
Interestingly, IntelliJ's Rust plugin does find the crate when I click on it in lib.rs
– it navigates to the downloaded source in ~/.cargo
...
In the dependency libfoo
, the lib
section of the Cargo.toml
file is specified as:
[package]
name = "libfoo"
[lib]
name = "foo"
crate-type = ["cdylib"]
I have tried all permutations of libfoo and foo to see if Cargo is getting confused between the lib name and the package/directory name.
It also fails if I specify a local path to the dependency. (Cargo compiles the dependency but then claims not to find it when it is declared/imported in lib.rs
.)
[dependencies]
libfoo = { path = "/Users/me/dev/libfoo" }
If I include a crate from git or the file system that has the same [lib]
name as the [package]
name, it works fine. So it appears the problem is with crates that have a have a library ([lib]
) name that is different from the package ([package]
) name.
If I remove the [lib]
section from the dependency's Cargo.toml
file, it works.
Update: if crate-type = ["cdylib"]
is removed from libfoo
, this works with foo
imported. If that is there, I get the same error with extern crate foo;
.
try to use it
? Does the dependent project actually build ok, as you mentioned in the previous sentence? – E_net4{ git = "https://github.com/rust-lang-nursery/rand" }
. – E_net4libmylib
is confuse... please use something more clear or the true name. Have you trylibmy
(I don't know just a idea) ? – Stargateur