在ndk工具链中是不支持type_alias?

时间:2014-08-19 08:40:06

标签: android eclipse c++11 android-ndk

我正在将一个带有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支持不完整的结果,或者我错过了一些明显的东西。

1 个答案:

答案 0 :(得分:1)

您需要使用gcc 4.8。将其添加到您的Application.mk

NDK_TOOLCHAIN_VERSION := 4.8