неопределенная ссылка на ‘core: fmt::write’ при связывании автономного исполняемого файла

#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