#debugging #rust #compiler-errors #embedded
#отладка #Ржавчина #ошибки компилятора #встроенный
Вопрос:
Я пытаюсь реализовать core::fmt::Write
структуру, которую я написал для управления текстовым буфером во встроенном проекте rust. Я использую #[no_std]
, и моя реализация приведена ниже
use core::fmt;
impl fmt::Write for Cell {
fn write_str(amp;mut self, s: amp;str) -> fmt::Result {
for ch in s.chars() {
self.put_char(ch)
}
Ok(())
}
}
put_char
функция работает должным образом при использовании в одиночку. Я пытаюсь использовать это в другом месте следующим образом
use core::fmt::{Write, Result};
...
let mut buff = io::Cell::new();
write!(amp;mut buff, "abc");
однако, когда я пытаюсь скомпилировать это, я получаю следующую ошибку во время связывания
ld: build/main.o: in function `core::fmt::Write::write_fmt':
/rustc/d32c320d7eee56706486fef6be778495303afe9e/library/core/src/fmt/mod.rs:182: undefined reference to `core::fmt::write'
ld: /rustc/d32c320d7eee56706486fef6be778495303afe9e/library/core/src/fmt/mod.rs:182: undefined reference to `core::fmt::write'
Почему я получаю это. Похоже, что это указывает на проблему во встроенных библиотеках. Что я делаю не так, что создает эту проблему
Нужно ли мне явно ссылаться на основные библиотеки? Я думал, что в этом нет необходимости
Комментарии:
1. Какую команду вы используете для связывания своего двоичного файла? И да, ожидается, что все проекты Rust будут ссылаться на
core
.2. Я использую
rustc -g -O --target x86_64-unknown-linux-gnu --crate-type staticlib -C panic=abort -C no-redzone=yes -C target-feature=-mmx,-sse, soft-float --emit obj
для создания объектного файла, который затем связываю с различными другими объектными файлами, вызывая вручнуюld