首页 > 解决方案 > 为什么 GSL-Lite 试图包含?

问题描述

我正在尝试在我的嵌入式 STM32 Keil 项目中使用 gsl。我的 Keil 项目最多使用过时的 semi c++11 编译器。(这是我的 ST 库为 LoRaWAN 设置的约束)。我正在使用 keil 捆绑的 V5.06 update 6 (build 750) ARM Compiler。Keil 选择不实施std::araySTL。我对此感到非常失望,但是我能做些什么。

我选择使用gsl-Lite。它应该是兼容的C++98C++03所以std::array不需要,但是当我尝试使用包含在我的包含路径中的库来编译我的代码时,我收到了这个构建消息:

..\Core\inc\gsl/gsl-lite.hpp(405): error: #5: cannot open source input file "array": No such file or directory
# include <array>

但是第 404 行以这段代码开头:

#if gsl_HAVE( ARRAY )
# include <array>
#endif

在我看来,他们正在尝试确定是否<array>可以包括在内。我的编辑器将此块变灰,就好像它没有被定义一样。

gsl_HAVE 定义为:

#define gsl_HAVE(             feature )  ( gsl_HAVE_##feature )

我不明白这是如何工作的,以及如何检查是否ARRAY未正确定义。

我不想不包含<array>,所以我的代码可以构建和使用 gsl-lite。我的首选选项是带有定义的东西。

更新

据我了解包含系统:

#define gsl_HAVE_ARRAY                  gsl_CPP11_110

被定义为自动排除一个特征(gsl_HAVE_ARRAY在这种情况下),当

#define gsl_CPP11_OR_GREATER  ( gsl_CPLUSPLUS >= 201103L )

被评估为真实。gsl_CPLUSPLUS定义为

#  define gsl_CPLUSPLUS  __cplusplus

但我似乎无法弄清楚__cplusplus.

标签: c++keilguideline-support-library

解决方案


我认为我的问题是它_cplusplus没有任何价值,因为 keil 没有添加它。即使我声明它不起作用,因为编译器不能gsl_CPLUSPLUS,因为它需要一个裸指针。199711Ldeletegsl::owner<int *>

似乎编译器太旧而无法处理 gsl。


推荐阅读