在Android上启用C ++ 11支持

我如何将C ++ 11集成到Android?

看来这里的主要答案包括对C ++ 11的实验性支持,而C ++ 11不再是实验性的。

如果你正在使用命令行NDK支持(我使用的IDE社区版本13为Java的东西),那么这是我必须把我的jni/Application.mk得到C ++ 11支持与API 19(在OSX上ML):

 NDK_TOOLCHAIN_VERSION := 4.8 # APP_STL := stlport_shared --> does not seem to contain C++11 features APP_STL := gnustl_shared # Enable c++11 extentions in source code APP_CPPFLAGS += -std=c++11 

从这里和这里派生。

首先,你需要确保你的工具链是“Cross GCC”。 虽然这是我的Linux的默认设置,但它并不在我的MacOSX Lion上。

为了做到这一点,转到项目属性> C / C ++生成>工具链编辑器 。 “ 当前工具链 ”应设置为“ 跨GCC ”。 您可能需要取消选中“ 仅显示兼容的工具链 ”框。

然后,在Android.mk中添加一个选项到LOCAL_CFLAGS:

 LOCAL_CFLAGS := -std=gnu++11 

我们现在需要通知Eclipse哪里可以find相应的新符号(例如“std :: unordered_map”)。 右键单击“jni”>属性> C / C ++常规 – >path和符号 – >符号 – > GNU C ++ ,并添加以下符号(点击“添加…”):

 Name: __GXX_EXPERIMENTAL_CXX0X__ Value: 

(即让“价值”为空)

如果你正在使用gradle-experimental-plugin ,你也可以在build.gradle文件中设置它:

 android.ndk { moduleName = "hello-android-jni" stl = "stlport_shared" cppFlags.add("-std=c++11") } 

随着最新的gradle-experimental-plugin 0.8.0-alpha4添加到您的应用程序/ build.gradle

 model { android { ndk { moduleName "native" CFlags.add("-std=c11") // Enable C11 support ldLibs.add("log") } } }