【发布时间】: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