【问题标题】:Using Boost with IAR's C++ compiler将 Boost 与 IAR 的 C++ 编译器一起使用
【发布时间】:2017-03-23 22:09:33
【问题描述】:

我第一次为 Boost 提供嵌入式项目的试驾。我正在使用 IAR 7.60.2 设置为 C++、标准、带异常、带 RTTI 和销毁静态对象。

我已经使用 Boost 1.62.0 复制并粘贴了这个 Boost Getting Started Example

正如您可能已经猜到了这个问题的存在,它无法构建(第一个错误是Error[Pe439]: expected a ">" ...\boost_1_62_0\boost\type_traits\remove_reference.hpp 30)。

该行恰好包含一个右值引用,这在 C++03 中不受支持。 Boost 使用现代 C++ 结构(如 T&&constexpr)会导致数百个错误。

不出所料,IAR 不是 Boost 声称对其进行测试的编译器之一,但事实上 Boost 可以与 C++11 之前的编译器一起工作,再加上 boost/predef 中存在一个特定于 IAR 的头文件,这一事实导致我相信可能有办法让它建立起来。

我搜索了 SO、interwebs 和一些 Boost 的来源,但我找不到任何有关如何将 Boost 与 IAR 一起使用的相关信息,所以我来问:

1.我应该做些什么来帮助 Boost 识别 我正在使用的 IAR 编译器及其局限性?

2。有没有机制 强制 Boost 为 C++03 编译器构建?

提前致谢。

【问题讨论】:

  • Boost 是一个库集合。并非所有库都支持相同的编译器。也就是说,有包括编译器检测在内的通用基础设施。这就是为什么我确定 C++03 没有 #define
  • 好的,那么有没有办法让通用基础架构识别我的编译器(包括它仅限于 C++03 的事实)?
  • 好吧,你已经发现了boost/predef。看起来您的编译器被识别为这样。但让我给你一个更有帮助的建议:Boost 1.62 是在 C++14 后 2 年发布的,而你还在为 C++11 之前的编译器苦苦挣扎。使用旧的 Boost 版本可能会更好。
  • 我发现了它,是的,但我想我不知道如何使用它,因为即使 Boost 的入门示例也无法构建——我正在尝试发现我是否在做有事吗。或者你是说 1.62.0 不会在 C++03 下构建?那将是有用的信息,因为那时我知道 Boost 对我不起作用。 (我打算使用 Boost 1.61.0 中引入的功能)。
  • “库集合”意味着一些库会构建,而另一些则不会。这几乎都是志愿者工作,支持好的平台会受到打击和错过。另一方面,像微软这样的编译器公司将保持 Boost 工作作为优先事项。例如,他们查看 Boost 以了解首先实现 C++17 的哪些部分。

标签: c++ boost embedded c++03 iar


【解决方案1】:

@MSalter 的 cmets 总结,上图:

Boost 是由不同人(主要是志愿者)构建和维护的不同年龄的库的集合。有些库是为使用旧版本的 C++ 而构建的,有些则需要较新的版本。

Boost 有一些通用的基础设施来控制某些设置。如果 Boost 公共基础架构不支持某人正在寻找的设置(并且“为 C++03 编译”不支持),那么给定库是否支持在 C++03 下编译将取决于它的制作时间和/ 或者它是否是专门为此设计的。 Boost 没有全球语言标准设置。

解决方案是简单地尝试有问题​​的功能,看看它们是否在所使用的环境中工作。

感谢@MSalter 的澄清。

【讨论】:

    猜你喜欢
    • 2014-07-11
    • 1970-01-01
    • 1970-01-01
    • 2012-09-22
    • 1970-01-01
    • 1970-01-01
    • 2023-04-06
    • 2012-05-06
    • 2016-03-19
    相关资源
    最近更新 更多