如何将 C++11 集成到 Android 中?
4 回答
看来这里的主要答案包括对 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
首先,您需要确保您的工具链是“跨 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”为空)
如果您使用的是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 添加到您的app/build.gradle:
model {
android {
ndk {
moduleName "native"
CFlags.add("-std=c11") // Enable C11 support
ldLibs.add("log")
}
}
}