75

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

4

4 回答 4

70

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

如果您正在使用命令行 NDK 支持(我使用 IDEA 社区版 13 来处理 Java 内容),那么这就是我必须在我jni/Application.mk的 API 19(在 OSX ML 上)获得 C++11 支持的内容:

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

源自这里这里

于 2014-01-27T16:59:40.203 回答
37

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

为此,请转到Project Properties > C/C++ Build > Tool Chain Editor。“当前工具链”应设置为“跨 GCC ”。您可能需要取消选中“仅显示兼容的工具链”框。

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

LOCAL_CFLAGS := -std=gnu++11

我们现在需要通知 Eclipse 在哪里可以找到相应的新符号(例如“std::unordered_map”)。转到右键单击“jni”> Properties > C/C++ General -> Paths and Symbols -> Symbols -> GNU C++,然后添加以下符号(通过单击“Add...”):

Name: __GXX_EXPERIMENTAL_CXX0X__
Value:

(即让“Value”为空)

于 2013-03-25T13:33:32.353 回答
7

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

android.ndk {
    moduleName = "hello-android-jni"
    stl = "stlport_shared"
    cppFlags.add("-std=c++11")
}
于 2016-03-30T21:24:34.733 回答
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")
        }
    }
}
于 2016-07-03T14:25:50.710 回答