rust rust-cargo

rust install dependencies



¿Cómo usar panic=abortar con dependencias externas? (1)

Parece que es porque c_vec especifica dylib como uno de sus tipos de biblioteca.

Archivé esto como un problema en Github aquí: https://github.com/rust-lang/cargo/issues/2738

Y obtuve una respuesta de uno de los desarrolladores:

ah desafortunadamente ese es un mensaje de error malo pero es debido a crate-type = ["dylib", "rlib"] en el c_vec crate. Esto hace que Cargo pase -C prefiera-dinámico, que se vincula con el dylib que enviamos, que se compila contra panic_unwind, lo que significa que el modo abortar no es válido (este error proviene del compilador).

La solución aquí sería eliminar "dylib" de la caja c_vec.

Por supuesto, tendrías que bifurcar tu propio lodepng y c_vec para encargarse de esto.

Para proyectos de cajones individuales, agregar estas líneas a Cargo.toml funciona como se esperaba.

[profile.release] panic = "abort"

Luego crea el proyecto:

cargo build --release

Sin embargo, en un proyecto que ha usado dependencias indirectamente, recibo un error.

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`.

La caja c_vec es una dependencia indirectamente utilizada.

¿Cómo usar panic=abort en un proyecto de múltiples cajas sin conflictos?

Detalles en caso de que importen:

  • Rustc 1.12.0
  • Biblioteca con problema: lodepng-rust
  • Linux, 64 bits