如何在ARM Cortex-M芯片上使用STL
How to use STL on ARM Cortex-M chips?
我正在使用MCU G 编译器&链接器: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似乎取决于操作系统。由于微控制器没有这样的东西,因此在链接精灵时缺少这些基本部分。
问题是如何在STM32 L4系列芯片上使用STL?
可以通过将-specs=nosys.specs
添加到G 链接器中来解决此问题。这将在一个单独的库中链接,并具有用于所有必需系统功能的实现。
另请参见:http://pabigot.github.io/bspacm/newlib.html
c标准函数需要一些基本功能(称为存根)才能正常工作。通常,操作系统提供这些功能。
-specs = nosys.specs提供了这些功能的非常愚蠢的版本。在您的编译器路径/共享/doc/doc/doc/gcc-arm-none-eabi/pdf中,应该有一个pdf libc.pdf,您会找到一些信息如何自己实施这些存根Div>
相关文章:
- 在C++STL中是否有Polyval(Matlab函数)等价物?
- 为什么这个运算符<重载函数对 STL 算法不可见?
- 在C应用程序中运行C++(带有STL)函数
- 使用2个键的cpp-stl::优先级队列排序不正确
- 在STL容器中使用模板类
- 用C++中的CPerson(类)类型的对象初始化STL矢量
- 将stl字符串缩小到小于15个字符的容量
- 在为LINUX创建共享库时,如何避免STL的私有/弱副本
- 检查函数返回类型是否与STL容器类型值相同
- STL算法函数在多个一维容器上的使用
- 在STL - C++中按成绩对学生列表进行排序?
- 为什么 STL 容器适配器堆栈中的 top 返回常量引用?
- λ可以适应STL吗?
- 为什么使用 NDK 不能存在不同的 stl 实现?
- 如果我真的真的想从 STL 容器继承,并且我继承构造函数并删除新运算符,会发生什么?
- 使用 char 分隔符解析C++中的字符串,但将可重复的字符保留为每个解析的子字符串 (C++ STL) 中的分隔符
- 在C++中迭代 STL 集时出现奇怪的问题<CStudent>
- 如何在 C++17 STL 并行算法中处理调度?
- 在学习数据结构之前对STL有一个了解是好的吗?
- 如何在ARM Cortex-M芯片上使用STL