c++ - 如何在ARM Cortex-M芯片上使用STL?

标签 c++ stl microcontroller cortex-m

我正在使用带有 MCU G++ 编译器和链接器的 STM32 开发板:arm-none-eabi-g++。但是,它似乎与STL不兼容:

#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++ STL 似乎依赖于操作系统。由于微 Controller 没有这些东西,因此在链接ELF时缺少这些重要部分。

问题是如何在 STM32 L4 系列芯片上使用 STL?

最佳答案

这个问题可以通过在 G++ 链接器中添加 -specs=nosys.specs 来解决。这链接在一个单独的库中,其中包含所有必需系统功能的实现。

另请参阅:http://pabigot.github.io/bspacm/newlib.html

关于c++ - 如何在ARM Cortex-M芯片上使用STL?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42243535/

相关文章:

c++ - C++标准是否保证cin、cout等先创建后销毁?

c - Tiva C 无法更改 MDR 寄存器的值

c++ - 这是 MSVC++ 2017 更新 3 中的编译器错误吗

c++ - arr [0] [2]的传递地址,必须在双指针中接收

c++ - alpine linux 上的程序段错误。我该如何解决?

c++ - 错误 : expected primary-expression before char

c++ - 将 vector<uint8_t> 的子集转换为 int

c++ - 如何为延迟评估的类方法提供 STL 容器?

stm32 - 了解 SPI CPOL 和 CPHA

c - 8位单片机生成伪随机数最快的方法是什么?