如何使用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


他们的细节很重要:

  • Rustc 1.12.0
  • 问题库:lodepng-rust
  • Linux,64位

  • 看起来像是因为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”。

    当然,你必须分配自己的lodepngc_vec来处理这个问题。

    链接地址: http://www.djcxy.com/p/36481.html

    上一篇: How to use panic=abort with external dependencies?

    下一篇: Swift + Firebase Security not working