2017-07-24 3 views
4

Ich habe Kiste A, die auf B und B angewiesen sind rust-nmea Kiste.Cargo-Build des gleichen Codes: falsche Kompilierzeit Fehler?

Wenn ich Kiste bauen A Ich habe Haufen von Fehlern (alle von ihnen, die use std::error::Error; verpasst) während der Build von rust-nmea Abhängigkeit:

error[E0599]: no method named `description` found for type `nom::Err<&[u8]>` in the current scope 
    --> /home/evgeniy/.cargo/registry/src/github.com-1ecc6299db9ec823/nmea-0.0.6/src/parse.rs:100:44 
    | 
100 |      IError::Error(e) => e.description().to_string(), 
    |           ^^^^^^^^^^^ 
    | 
    = help: items from traits can only be used if the trait is in scope 
    = note: the following trait is implemented but not in scope, perhaps add a `use` for it: 
      candidate #1: `use std::error::Error;` 

Aber wenn ich gehen, um Quellbaum von B Kiste und laufen cargo build, alle bauen ohne Fehler (wenn Sie mir folgen abhängen A auf B und B hängen von rust-nmea),

wenn auch /home/evgeniy/.cargo/registry/src/github.com-1ecc6299db9ec823/nmea-0.0.6/ gehen (siehe com Pfahlfehler) und run cargo build dann alles gut.

Ladung Baum Show für A:

│ ├── chrono v0.4.0 
│ │ ├── num v0.1.40 
│ │ │ ├── num-integer v0.1.35 
│ │ │ │ └── num-traits v0.1.40 
│ │ │ ├── num-iter v0.1.34 
│ │ │ │ ├── num-integer v0.1.35 (*) 
│ │ │ │ └── num-traits v0.1.40 (*) 
│ │ │ └── num-traits v0.1.40 (*) 
│ │ └── time v0.1.38 
│ │  └── libc v0.2.27 
├── nmea v0.0.6 
    │ ├── chrono v0.4.0 (*) 
    │ └── nom v3.2.0 
    │  └── memchr v1.0.1 (*) 

und für zwischengespeicherte von cargorust-nmea:

├── chrono v0.4.0 
│ ├── num v0.1.40 
│ │ ├── num-integer v0.1.35 
│ │ │ └── num-traits v0.1.40 
│ │ ├── num-iter v0.1.34 
│ │ │ ├── num-integer v0.1.35 (*) 
│ │ │ └── num-traits v0.1.40 (*) 
│ │ └── num-traits v0.1.40 (*) 
│ └── time v0.1.38 
│  └── libc v0.2.27 
└── nom v3.2.0 
    └── memchr v1.0.1 
     └── libc v0.2.27 (*) 

so für guten und schlechten Fall verwendete die gleichen Abhängigkeiten.

Wenn cargo build -v -j1 ausgeführt, habe ich rustc Befehlszeile für beide Fälle.

Der einzige Unterschied für guten und schlechten Fall ist dieser Teil:

-L dependency=/home/evgeniy/.cargo/registry/src/github.com-1ecc6299db9ec823/nmea-0.0.6/target/debug/deps --extern chrono=/home/evgeniy/.cargo/registry/src/github.com-1ecc6299db9ec823/nmea-0.0.6/target/debug/deps/libchrono-8e9e54e691d9b988.rlib --extern nom=/home/evgeniy/.cargo/registry/src/github.com-1ecc6299db9ec823/nmea-0.0.6/target/debug/deps/libnom-b72336f662b090c1.rlib 

schlimmer Fall hat unterschiedlichen Pfad zu Bibliotheken und libnom-e2ec53418967eac0.rlib statt libnom-b72336f662b090c1.rlib, während libchrono-8e9e54e691d9b988.rlib Spiel.

Die Kisten A und B stammen aus der Nähe und ich kann das Problem nicht auf einen einfacheren Fall reduzieren. nom Kisten nicht in A und B außer über rust-nmea. rust-nmea wird in einfacher Weise verwendet, nur nmea = 0.0.6 in Cargo.toml. Keine Flaggen oder so Dinge.

Eine Idee, warum Krate Abhängigkeit mit den gleichen Flags (überhaupt keine Flags) kann produzieren oder nicht Syntaxfehler erzeugen?

+0

Blindschuss im Dunkeln: Verwenden Sie Rostup, und wenn ja, haben Sie lokale Overrides gesetzt, die stören könnten? –

+0

@DK. Ja, ich habe 'rostup' verwendet, aber der letzte Befehl zum Überschreiben war:' grep -a override ~/.bash_history | grep rostup | tail -n 1' 'rostup override unset'. Gibt es eine Möglichkeit zu überprüfen, ob "override" noch aktiv ist? – fghj

+0

Es gibt 'Rost Override-Liste'. –

Antwort

2

fand ich Quelle des Problems, Kiste A zweite Ebene dependicies mit cexpr hat, cexpr hat nom = {version = "^3", features = ["verbose-errors"] } in Cargo.toml, rust-nmea hängen auch von nom, so haben wir Zeit, Fehler kompilieren.

Verwandte Themen