Как использовать panic = прервать с внешними зависимостями?

#rust #rust-cargo

#Ржавчина #rust-груз

Вопрос:

Для проектов с одним ящиком добавление этих строк 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 бит

Комментарии:

1. Какая у вас версия rust? В текущую ночь я даже не могу заставить c_vec выполнить сборку, чтобы помочь протестировать это.

2. @Jsor, добавлены подробности

3. спасибо, и что именно вы делаете, чтобы вызвать панику?

4. @Jsor, ничего, его даже не строят.

5. Уверен, что это ошибка, см. github.com/rust-lang/rust/issues/32837 Я думаю, что на самом деле это не было полностью исправлено. Я пытаюсь добавить комментарий, но серверы Github прямо сейчас умирают.

Ответ №1:

Похоже, это потому c_vec , что указывает dylib как один из его библиотечных типов.

Я обнаружил это как проблему на Github здесь: https://github.com/rust-lang/cargo/issues/2738

к сожалению, это плохое сообщение об ошибке, но это из-за crate-type = [«dylib», «rlib»] в c_vec crate . Это приводит к передаче груза -C prefer-dynamic, который ссылается на отправляемый нами файл dylib, который скомпилирован для panic_unwind, что означает, что режим прерывания действительно недействителен (эта ошибка исходит от компилятора).

Исправлением здесь было бы удаление «dylib» из ящика c_vec.

Конечно, вам придется раскошелиться самостоятельно lodepng и c_vec позаботиться об этом.

Комментарии:

1. Я не помню технику, но я помню, что читал, что Cargo поддерживает наложение локальных зависимостей, поэтому я бы предположил, что вам нужно только разветвить c_vec , если это единственное указание dylib .