安卓NDK |如何确定 NDK 9c 支持的 C++ 标准
Posted
技术标签:
【中文标题】安卓NDK |如何确定 NDK 9c 支持的 C++ 标准【英文标题】:Andorid NDK | How to determine which C++ standard supported by NDK 9c 【发布时间】:2014-01-25 19:56:10 【问题描述】:我想在我的 android 原生项目中尝试 c++(尤其是 C++11)的新功能。
如何确定 NDK Revision 9c 支持哪个 C++ 标准?
更新
例如以防万一
int arr[] = 1,2,3,4,5;
for(int& e : arr)
e = e*e;
我明白了
error: range-based-for loops are not allowed in C++98 mode
这是否意味着 NDK 只支持 C++98 标准?
【问题讨论】:
编译一些好东西怎么样? 支持 gcc 4.8 和 clang 3.3,所以这意味着 C++11 中的几乎所有内容,模数错误。 @TemplateRex,为什么在这种情况下我会出错? 因为 C++98 不支持 range-for 循环。你需要用-std=c++11
模式编译。
@CAMOBAP 完成,查看答案!
【参考方案1】:
根据Android NDK docs,9c 版支持 gcc 4.8 和 Clang 3.3,两者都完全符合 C++11。要真正使用 C++11,您需要使用标志 -std=c++11
进行编译。
【讨论】:
我已经为 C++11 启用了构建,但我仍然无法在for
范围内构建;我收到如下错误:foo.cpp:83:33: error: 'begin' was not declared in this scope
- 知道会发生什么吗?我正在使用stlport_static
,如果它有所作为(由于我依赖另一个库,我不能使用 gnustl)。
@fluffy 如果您使用的是任何类型的 3rd-party STL 版本,那么所有的赌注都会被取消。您可能需要查阅您的 STL 文档以了解它们是否支持 C++11 或更高版本。
我知道与 Android NDK 捆绑的 STLPort 版本还没有明确的 C++11 支持,但我希望这个范围无论如何都能工作,因为它提供了相同的迭代器语义。不过,显然不是,所以我只使用BOOST_FOREACH
(效果很好)。谢谢。
这取决于您的 STL 是否为 C 数组提供非成员 begin()
和 end()
。您应该能够在 std::vector
上使用 range-for,例如,因为 range-for 将退回到成员 .begin()
和 .end()
我在std::deque
上尝试过,但出现了错误。这就是为什么我遇到的特定错误如此奇怪的原因。那好吧。也许有一天现实生活会赶上 2011 年的未来。:)以上是关于安卓NDK |如何确定 NDK 9c 支持的 C++ 标准的主要内容,如果未能解决你的问题,请参考以下文章
如何确定 C 代码是为 Android/NDK 还是 iOS 编译的