Android 设置C++;11(std::thread)用于带有ADT/Eclipse的NDK
我一直在尝试使用C++11。我正在开发一个android项目,我想使用std::mutex。连同OpenCV 但无论我做什么,我似乎都无法修复无法解析的Android 设置C++;11(std::thread)用于带有ADT/Eclipse的NDK,android,eclipse,c++11,android-ndk,java-native-interface,Android,Eclipse,C++11,Android Ndk,Java Native Interface,我一直在尝试使用C++11。我正在开发一个android项目,我想使用std::mutex。连同OpenCV 但无论我做什么,我似乎都无法修复无法解析的类型“mutex” 错误 我试着按照我在某地和其他地方找到的教程进行学习。 ADT v22.3.0-887826 已安装的C/C++编译器(CDT) 经过这么多的教程,现在真是一团糟。因此,我将解释我当前的设置 项目>属性>C/C++构建>工具链编辑器 当前工具链为“交叉GCC” 当前生成器为“Android Builder” 项目>属性
类型“mutex”
错误
我试着按照我在某地和其他地方找到的教程进行学习。
- 项目>属性>C/C++构建>工具链编辑器
- 当前工具链为“交叉GCC”
- 当前生成器为“Android Builder”
- 项目>属性>C/C++生成>发现选项
- 编译器调用命令为“gcc”
- 编译器调用参数是-E-P-v-dD“${plugin\u state\u location}/specs.c-std=c++11”
- 项目>C/C++常规>路径和符号>#符号选项卡
- 符号=uu cplusplus和值=1
APP_STL := gnustl_static
APP_USE_CPP0X := true
APP_CPPFLAGS := -std=c++11 -frtti -fexceptions
APP_ABI := armeabi-v7a
APP_PLATFORM := android-8
我试图将cplusplus符号的值更改为201103L
并使用空值尝试了uuugxx_uxx0x
但似乎什么都不管用,我做错了什么
感谢您的帮助 对
std::thread
的支持有点特殊。例如,这一问题在本报告中得到了解决。这篇文章很短,但可以用一句话来概括:
如果希望#include
或#include
,则不能使用(默认)gcc 4.6工具链
因此,请将NDK\u TOOLCHAIN\u VERSION=4.8
或NDK\u TOOLCHAIN\u VERSION=clang
添加到您的应用程序.mk
要使ADT正确重建其索引,请参阅Android.mk中的或。添加
本地\CPPFLAGS:=-std=c++11-D\uu cplusplus=201103L
,然后重建项目(用于重新配置编译器)。重建后,如果升级NDK或安装新版本的Android Studio(编写时为2.1),项目会自动将所需的stl路径添加到路径和符号中让Android Studio为您下载NDK,您将获得第12版-其中有许多未在\NDK bundle\sources\cxx stl\gnu libstdc++\4.9\libs\armeabi-v7a\include\bits\c++config.h中定义的std::defines-与线程相关的版本,例如“GLIBCXX”中有隐藏线程类的GTHREADS
它说,在第10e版之后,gcc被弃用。有了这些,前面提到的所有定义都彻底破坏了依赖于线程的JNI代码
其他帖子中提到的叮当声对我们来说不是一个解决方案,因为它似乎不支持thead_local。
解决方案是恢复到10e版-您可以在以下网址找到:
dl.google.com/android/ndk
解压包并复制到sdk/ndk捆绑包目录中-确保先删除最初的修订版12。问题仅仅是Eclipse强调的错误,还是您的构建也失败了?Eclipse在C++11.0中有缺陷。的可能重复。无论哪种方式,您都不需要CDT;但是你必须安装NDK。我不认为“
\ucplusplus
和Value=1”是正确的;我认为C++11的值应该至少为201103L
。但是我认为你真的不应该弄乱这个值。现在,“但似乎什么都不起作用”是什么意思?简而言之,请回答Steve的问题。还有一件事:?您使用的GCC的实际版本是什么?如果\uu cplusplus
==1,那么它的版本很可能太旧了。那么从教程中我看到的cxx stt/4.6之类的“包含”源代码呢。这是否意味着我也必须更改包含源?可能是的,只有这样你的答案才会起作用,对吗?对于索引器的问题,可能有不同的解决方法。也许你的方法也很好。是的,我有!终于成功了!老兄,这太难缠了。我不得不重新启动eclipse,这花了我3个小时才弄明白:)但一切都在运行。截至2018-15-01,与Binglong文章的链接指向一堵墙,表明所讨论的文章是私人的,因此几乎所有没有获得该文章作者特权的人都无法访问。@Adrien,谢谢你让我知道。无论如何,我确实发布了那篇文章的摘要。请注意,这与当前的NDKR16无关:当前的NDKR16支持C++11甚至C++17,但gcc工具链将在下一版本中消失。而且,eclipse已经被弃用多年了。根据NDK bugtracker,这个问题已经被修复