在独立 (bare-metal) 项目中使用 std::tuple 和 arm-none-eabi-gcc?
Using std::tuple with arm-none-eabi-gcc on a freestanding (bare-metal) project?
据我了解,std::pair
和 std::tuple
基本上是 compile-time 不需要任何特定运行时支持的构造,并且可以纯粹使用模板实现(如果杂乱无章)构造。
那么为什么当我在 arm-none-eabi
的 C++ 标准库的裸机项目中 #include <tuple>
时,它包含 <array>
,其中包含 <stdexcept>
最后包含 <string>
,这让我无法包含它,因为它会像 wchar.h
和 bits/postypes.h
一样进入 headers,而 arm-none-eabi-gcc 中没有包含?我做错了什么?
我可以使用 <utility>
中的 std::pair
,但是如果我不编辑 C++ 标准库 headers 来删除有问题的包含,std::tuple
就无法工作,这显然是不可接受的。
这是有效防止裸机程序使用完全合法的 STL 部分的疏忽或限制,还是我应该在这里做更多的事情?我需要提供我自己的wchar.h
和其他headers吗??
如果能解释一下 headers 作者的期望,我将不胜感激。
假设您要针对 Cortex-M 进行编译,请使用 ARM's own GCC distribution,以前称为 GCC-ARM-Embedded。元组在那里工作正常。
顺便说一下,元组 never was part of the STL. You probably meant to say C++ Standard Library。
据我了解,std::pair
和 std::tuple
基本上是 compile-time 不需要任何特定运行时支持的构造,并且可以纯粹使用模板实现(如果杂乱无章)构造。
那么为什么当我在 arm-none-eabi
的 C++ 标准库的裸机项目中 #include <tuple>
时,它包含 <array>
,其中包含 <stdexcept>
最后包含 <string>
,这让我无法包含它,因为它会像 wchar.h
和 bits/postypes.h
一样进入 headers,而 arm-none-eabi-gcc 中没有包含?我做错了什么?
我可以使用 <utility>
中的 std::pair
,但是如果我不编辑 C++ 标准库 headers 来删除有问题的包含,std::tuple
就无法工作,这显然是不可接受的。
这是有效防止裸机程序使用完全合法的 STL 部分的疏忽或限制,还是我应该在这里做更多的事情?我需要提供我自己的wchar.h
和其他headers吗??
如果能解释一下 headers 作者的期望,我将不胜感激。
假设您要针对 Cortex-M 进行编译,请使用 ARM's own GCC distribution,以前称为 GCC-ARM-Embedded。元组在那里工作正常。
顺便说一下,元组 never was part of the STL. You probably meant to say C++ Standard Library。