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