如何使用panic = abort与外部依赖?

时间:2016-10-04 04:39:17

标签: rust rust-cargo

对于单个crate项目,将这些行添加到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 crate是间接使用的依赖项。

如何在没有冲突的多箱项目中使用panic=abort

详情请注意:

  • Rustc 1.12.0
  • 有问题的图书馆:lodepng-rust
  • Linux,64位

1 个答案:

答案 0 :(得分:3)

看起来是因为c_vec指定dylib作为其库类型之一。

我在Github上提交了这个问题:https://github.com/rust-lang/cargo/issues/2738

得到了其中一位开发人员的回答:

  不幸的是,这是一个错误的错误信息,但它是   因为c_vec包中的crate-type = [“dylib”,“rlib”]。这个   导致货物通过-C prefer-dynamic链接到dylib   我们发货是针对panic_unwind编译的,意思是中止模式   确实无效(此错误来自编译器)。

     

此处的修复方法是从c_vec包中删除“dylib”。

当然,你必须自己分叉lodepngc_vec才能解决这个问题。