2017-02-15 32 views
1

Я использую плату разработчика STM32 с компилятором MCU G ++ & Ссылка: arm-none-eabi-g++. Однако, по-видимому, не совместим с STL:Как использовать STL на чипах ARM Cortex-M?

#include <list> 

int main (void) 
{ 
    std::list<int> list; 

    list.push_back(1); 
    list.sort(); 

    return 0; 
} 

Компоновщик сообщения об ошибках: СТЛ

abort.c:(.text.abort+0xa): undefined reference to `_exit' 
fstatr.c:(.text._fstat_r+0x10): undefined reference to `_fstat' 
signalr.c:(.text._kill_r+0x10): undefined reference to `_kill' 
signalr.c:(.text._getpid_r+0x0): undefined reference to `_getpid' 
writer.c:(.text._write_r+0x12): undefined reference to `_write' 
closer.c:(.text._close_r+0xc): undefined reference to `_close' 
isattyr.c:(.text._isatty_r+0xc): undefined reference to `_isatty' 
lseekr.c:(.text._lseek_r+0x12): undefined reference to `_lseek' 
readr.c:(.text._read_r+0x12): undefined reference to `_read' 

C++ кажется зависит от операционных систем. Поскольку у микроконтроллера нет таких вещей, эти существенные части отсутствуют при соединении ELF.

Проблема в том, как я могу использовать STL на чипах серии L4 серии STM32?

+2

Эти сообщения-ссылки не должны ничего делать с стандартной библиотекой C++. Похоже, вам не хватает привязок для newlib или таких. –

+0

Возможно, вам понадобится установить новый компилятор [GCC] (http://gcc.gnu.org/) и, возможно, другие вещи (кросс-binutils, cross-libc). Это вопрос системного администрирования и установки соответствующих и новейших инструментов сборки. –

+0

@ πάνταῥεῖ @BasileStarynkevitch Я добавил флагов '-specs = nosys.specs' к компоновщику, а затем никаких ошибок не появилось !! Задача решена. –

ответ

0

: C Standardlibrary нужны некоторые базовые функции (называемые окурки), чтобы работать должным образом. Обычно ОС предоставляет эти функции.

-specs = nosys.specs предоставляет очень немые версии этих функций. В вашем пути к компилятору в разделе/​​share/doc/gcc-arm-none-eabi/pdf должен быть pdf libc.pdf, там вы найдете информацию о том, как реализовать эти заглушки самостоятельно (глава Systemcalls).

2

Эта проблема может быть решена путем добавления -specs=nosys.specs в компоновщик G ++. Это ссылки в отдельной библиотеке с реализациями для всех необходимых системных функций.

Смотрите также: http://pabigot.github.io/bspacm/newlib.html