如何使用panic =与外部依赖关系中止?
对于单个Cargo.toml
箱项目,将这些项目添加到Cargo.toml
可以按预期工作。
[profile.release]
panic = "abort"
然后建立该项目:
cargo build --release
但是,在一个间接使用依赖关系的项目上,我遇到了一个错误。
Compiling c_vec v1.0.12
error: the linked panic runtime `panic_unwind` is not compiled with this crate's panic strategy `abort`
error: aborting due to previous error
Build failed, waiting for other jobs to finish...
error: Could not compile `c_vec`.
c_vec
箱是间接使用的依赖项。
如何在没有冲突的情况下在多包项目上使用panic=abort
?
他们的细节很重要:
看起来像是因为c_vec
指定dylib
作为它的一个库类型。
我在Github上提出这个问题:https://github.com/rust-lang/cargo/issues/2738
并从一位开发者那里得到了答案:
不幸的是,这是一个糟糕的错误消息,但它是因为c_vec箱中的crate-type = [“dylib”,“rlib”]造成的。 这导致Cargo通过-C prefer-dynamic链接到我们发货的dylib,这是针对panic_unwind编译的,这意味着中止模式确实无效(此错误来自编译器)。
这里的解决方法是从c_vec箱中移除“dylib”。
当然,你必须分配自己的lodepng
和c_vec
来处理这个问题。