我正在将一个带有c ++ 0x的c ++项目移植到android。除了与type_alias相关的东西外,包括c ++ 0x特性在内的所有内容都可以编译并正常工作。
例如
for(const auto& p : paths)
{
...
}
编译,而
class dummy
{
...
using t_pair = std::pair<std::string, int>;
}
没有,给出了几个错误
jni/dummy.h:31:8: error: expected nested-name-specifier before 't_pair'
jni/dummy.h:31:8: error: using-declaration for non-member at class scope
jni/dummy.h:31:15: error: expected ';' before '=' token
jni/dummy.h:31:15: error: expected unqualified-id before '=' token
如果我放置type_alias ouside类定义,它会产生这个
jni/dummy.h:39:7: error: expected nested-name-specifier before 't_pair'
jni/dummy.h:39:7: error: 't_pair' has not been declared
jni/dummy.h:39:14: error: expected ';' before '=' token
jni/dummy.h:39:14: error: expected unqualified-id before '=' token
我想我必须提到这个编译并在vs13中工作。
Android.mk
LOCAL_PATH := $(call my-dir)
include $(CLEAR_VARS)
LOCAL_MODULE := ...
LOCAL_SRC_FILES := ...
LOCAL_CFLAGS += -std=c++11
LOCAL_LDLIBS += -llog -ldl
include $(BUILD_SHARED_LIBRARY)
Application.mk
APP_STL := gnustl_shared
APP_CPPFLAGS := -frtti -fexceptions -std=c++11
APP_ABI := armeabi-v7a
APP_PLATFORM := android-14
我正在使用android-ndk-r9d和arm-linux-androideabi-4.6工具链(根据eclipse控制台输出)。我尝试用-std = gnu ++ 11替换-std = c ++ 11以及用stlport_shared替换gnustl_shared,但它似乎没有任何效果。
实际上,这不是一个大问题,可以简单地覆盖,但我想知道它是否是c ++ 11支持不完整的结果,或者我错过了一些明显的东西。
答案 0 :(得分:1)
您需要使用gcc 4.8。将其添加到您的Application.mk
NDK_TOOLCHAIN_VERSION := 4.8