在Android上启用C ++ 11支持

时间:2013-03-25 13:33:32

标签: android c++ c++11

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

4 个答案:

答案 0 :(得分:68)

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

如果你正在使用命令行NDK支持(我使用IDEA社区版13来获取Java的东西),那么我必须在我的jni/Application.mk中使用API​​来获得C ++ 11支持(在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

派生自herehere

答案 1 :(得分:36)

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

要执行此操作,请转到项目属性> C / C ++ Build>工具链编辑器。 “当前工具链”应设置为“ Cross GCC ”。您可能需要取消选中“仅显示兼容的工具链”框。

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

LOCAL_CFLAGS := -std=gnu++11

我们现在需要告知Eclipse在哪里可以找到相应的新符号(例如“std :: unordered_map”)。转到右键单击“jni”>属性> C / C ++一般 - >路径和符号 - >符号 - > GNU C ++ ,并添加以下符号(单击“添加...”):

Name: __GXX_EXPERIMENTAL_CXX0X__
Value:

(即让“值”为空)

答案 2 :(得分:7)

如果您使用gradle-experimental-plugin,还可以在 build.gradle 文件中进行设置:

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

答案 3 :(得分:1)

使用最新的gradle-experimental-plugin 0.8.0-alpha4添加到 app / build.gradle

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