首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何在ARM Cortex-M芯片上使用STL?

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

Stack Overflow用户
提问于 2017-02-15 15:54:16
回答 2查看 2.1K关注 0票数 2

我正在使用STM32开发板与单片机G++编译器和链接器:arm-none-eabi-g++。然而,它似乎与STL不兼容:

代码语言:javascript
复制
#include <list>

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

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

    return 0;
}

链接器错误消息:

代码语言:javascript
复制
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似乎依赖于操作系统。由于微控制器没有这样的东西,所以在连接ELF时,这些必要的部件就会丢失。

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

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2017-03-17 06:45:52

C标准库需要一些基本函数(称为存根)才能正常工作。通常,操作系统提供这些功能。

-specs= nosys.specs提供了这些函数的非常愚蠢的版本。在/share/doc/gcc-arm-none-eabi/pdf下的编译器路径中,应该有一个pdf存根,在那里你会找到一些如何自己实现这些存根的信息(系统调用章节)。

票数 1
EN

Stack Overflow用户

发布于 2017-02-15 16:17:55

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

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

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/42243535

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档