在独立(裸金属)项目上使用std::tuple with arm none eabi gcc

Using std::tuple with arm-none-eabi-gcc on a freestanding (bare-metal) project?

本文关键字:tuple std with arm gcc eabi none 独立 金属 项目      更新时间:2023-10-16

我的理解是,std::pairstd::tuple基本上是编译时构造,不需要任何特定的运行时支持,并且可以纯粹使用模板构造来实现(如果混乱的话)。

那么,为什么当我在arm-none-eabi的C++标准库中的裸机项目中#include <tuple>时,它包括<array>,其中包括<stdexcept>,最终包括<string>,这使得我无法将其包括在内,因为这会到达像wchar.hbits/postypes.h这样的头文件中,而这些头文件不包括在arm none-eabi-gcc中?我做错了什么?

我可以从<utility>很好地使用std::pair,但如果不编辑C++标准库头以删除有问题的include,std::tuple就无法工作,这显然是不可接受的。

这是一种监督或限制,有效地阻止了裸机程序使用STL的完全合法部分,还是我应该在这里做更多的事情?我是否需要提供我自己的wchar.h和其他标头??

如果能解释一下这些标题的作者在这里的期望,我将不胜感激。

假设您想为Cortex-M编译,请使用ARM自己的GCC发行版,以前称为GCC ARM Embedded。Tuple在那里工作得很好。

顺便说一句,Tuple从来都不是STL的一部分。你可能是说C++标准库。