| Found possibly newer version of crate `..` which `..` depends on. |
| |
| Consider these erroneous files: |
| |
| `a1.rs` |
| ```ignore (needs-linkage-with-other-tests) |
| #![crate_name = "a"] |
| |
| pub fn foo<T>() {} |
| ``` |
| |
| `a2.rs` |
| ```ignore (needs-linkage-with-other-tests) |
| #![crate_name = "a"] |
| |
| pub fn foo<T>() { |
| println!("foo<T>()"); |
| } |
| ``` |
| |
| `b.rs` |
| ```ignore (needs-linkage-with-other-tests) |
| #![crate_name = "b"] |
| |
| extern crate a; // linked with `a1.rs` |
| |
| pub fn foo() { |
| a::foo::<isize>(); |
| } |
| ``` |
| |
| `main.rs` |
| ```ignore (needs-linkage-with-other-tests) |
| extern crate a; // linked with `a2.rs` |
| extern crate b; // error: found possibly newer version of crate `a` which `b` |
| // depends on |
| |
| fn main() {} |
| ``` |
| |
| The dependency graph of this program can be represented as follows: |
| ```text |
| crate `main` |
| | |
| +-------------+ |
| | | |
| | v |
| depends: | crate `b` |
| `a` v1 | | |
| | | depends: |
| | | `a` v2 |
| v | |
| crate `a` <------+ |
| ``` |
| |
| Crate `main` depends on crate `a` (version 1) and crate `b` which in turn |
| depends on crate `a` (version 2); this discrepancy in versions cannot be |
| reconciled. This difference in versions typically occurs when one crate is |
| compiled and linked, then updated and linked to another crate. The crate |
| "version" is a SVH (Strict Version Hash) of the crate in an |
| implementation-specific way. Note that this error can *only* occur when |
| directly compiling and linking with `rustc`; [Cargo] automatically resolves |
| dependencies, without using the compiler's own dependency management that |
| causes this issue. |
| |
| This error can be fixed by: |
| * Using [Cargo], the Rust package manager, automatically fixing this issue. |
| * Recompiling crate `a` so that both crate `b` and `main` have a uniform |
| version to depend on. |
| |
| [Cargo]: ../cargo/index.html |