Почему использование rand / rand_core с #! [No_std] приводит к «дублированию элемента lang»? - PullRequest
1 голос
/ 19 марта 2020

Я пытаюсь сгенерировать случайные числа, используя rand или rand_core. Согласно документации , #![no_std] использование может быть разрешено с помощью default-features = false. Поэтому я попытался сделать это как для rand, так и для rand_core, чтобы проверить, работает ли один из них. Я получаю одинаковые ошибки в обоих случаях, поэтому я показываю, что я сделал для rand_core.

rand_core = {version = "0.5.1", default-features = false}

, а затем импортирую его как:

use rand_core::RngCore;

Однако я получаю следующие ошибки (я не написал эту часть кода):

error[E0152]: found duplicate lang item `oom`
   --> src/alloc.rs:116:1
    |
116 | / fn alloc_error_handler(layout: Layout) -> ! {
117 | |     panic!("allocation error: {:?}", layout)
118 | | }
    | |_^
    |
    = note: the lang item is first defined in crate `std` (which `rand_core` depends on)

error[E0152]: found duplicate lang item `panic_impl`
  --> src/panic.rs:21:1
   |
21 | / fn panic(info: &PanicInfo) -> ! {
22 | |     let mut host_stderr = ErStderr::default();
23 | |
24 | |     writeln!(host_stderr, "{}", info).ok();
25 | |
26 | |     unsafe {libc::exit(1); }
27 | | }
   | |_^
   |
   = note: the lang item is first defined in crate `std` (which `rand_core` depends on)

error[E0152]: found duplicate lang item `eh_personality`
  --> src/panic.rs:29:28
   |
29 | #[lang = "eh_personality"] extern fn eh_personality() {}
   |                            ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
   |
   = note: the lang item is first defined in crate `panic_unwind` (which `std` depends on)

Вот минимальный рабочий пример: https://play.rust-lang.org/?version=nightly&mode=debug&edition=2018&gist=7e748b901ea22742c878e8208d9c0691

Я использую ночной.

Это мой Cargo.toml.

[dependencies]
libc = "0.2"
cbindgen = "0.12.2"
rand_core = {version = "0.5.1", default-features=false}

[lib]
crate-type = ["staticlib"]

1 Ответ

0 голосов
/ 20 марта 2020

Понятия не имею, почему это работает, но когда я удаляю cbindgen из списка зависимостей, все автоматически работает.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...