Android Application.mk设置能够使用c ++ 11 <random>和dynamic_cast

时间:2016-01-19 03:38:31

标签: android c++11 random java-native-interface dynamic-cast

在Application.mk文件中,当使用APP_STL:= stlport_static时我可以使用c ++ 11 dynamic_cast但它不会编译&#34;随机&#34;特征

我已经尝试了APP_STL:= gnustl_static和APP_STL:= c ++ _ static但是那些不允许我使用dynamic_cast。

什么是Application.mk适当的设置才能同时使用两者?

我目前的Application.mk看起来像是:

APP_CPPFLAGS += -std=c++11
APP_STL := stlport_static 
APP_ABI := armeabi armeabi-v7a x86

编辑:

根据Michaels的说明,最终有效的Application.mk是:

#LIBCXX rebuild was needed once when using APP_STL := c++_static
LIBCXX_FORCE_REBUILD := true
APP_CPPFLAGS += -std=c++11 -frtti -fexceptions
APP_STL := c++_static
#Also the gnu compiler can be used
#APP_STL:= gnustl_static
APP_ABI := armeabi armeabi-v7a x86
NDK_TOOLCHAIN_VERSION := 4.8

1 个答案:

答案 0 :(得分:1)

听起来你忘了启用RTTI,dynamic_cast用它来执行运行时类型检查。

引自the documentation

  

[To]确保与早期版本兼容,[NDK工具链]默认编译所有C ++源-fno-rtti

     

要为整个应用程序启用整个应用程序的RTTI支持,请将以下行添加到Application.mk文件中:

     

APP_CPPFLAGS += -frtti

我在stlport来源中没有看到任何random标题,因此它可能不支持该功能。请改用另一个STL实现,例如gnustl。

所以你需要的是:

APP_CPPFLAGS += -std=c++11 -frtti
APP_STL := gnustl_static