我的项目取决于
bitvec
板条箱(问题不需要板条箱知识)。
不幸的是,这个板条箱没有得到积极维护,并且有一些 美里下的问题。 一个仁慈的灵魂已经解决了与美里相关的问题(并制作了一个陈旧的公关)。
为了在我的项目中使用 miri,我尝试使用这个修补版本, 但我不想依赖某些 github 存储库来获取发布版本, 所以我在我的
Cargo.toml
中尝试了以下方法
[target.'cfg(miri)'.dependencies]
bitvec = { git = "https://github.com/djkoloski/bitvec.git", branch = "fix_miri" }
[target.'cfg(not(miri))'.dependencies]
bitvec = "1.0.1"
不幸的是,这给了我以下错误:
~$ MIRIFLAGS="-Zmiri-tree-borrows" cargo +nightly miri test
thread 'main' panicked at src/tools/miri/cargo-miri/src/util.rs:235:80:
called `Result::unwrap()` on an `Err` value: CargoMetadata { stderr: "error: failed to load manifest for workspace member `<myproject>`\nreferenced by workspace at `<myworkspace>/Cargo.toml`\n\nCaused by:\n failed to parse manifest at `<myproject>/Cargo.toml`\n\nCaused by:\n Dependency 'bitvec' has different source paths depending on the build target. Each dependency must have a single canonical source path irrespective of build target.\n" }
note: run with `RUST_BACKTRACE=1` environment variable to display a backtrace
有没有办法只在 miri 下使用这个依赖?
我最终使用了以下解决方法, 谢谢你@eggypal 他对重命名依赖项的评论为我指明了正确的方向。
[target.'cfg(miri)'.dependencies]
bitvec_miri = { git = "https://github.com/djkoloski/bitvec.git", branch = "fix_miri" }
[target.'cfg(not(miri))'.dependencies]
bitvec_non_miri = "1.0.1"
#[cfg(miri)]
pub use bitvec_miri::*;
#[cfg(not(miri))]
pub use bitvec_non_miri::*;
现在我只需更换所有的
use bitvec::{/*...*/};
陈述
use crate::bitvec::{/*...*/};