如果我的代码使用RTTI,那么它将无法在Android上运行?

时间:2014-06-01 03:58:03

标签: android c++ java-native-interface rtti

我在Android Native Development Kit Cookbook中读到:

  

默认情况下,Android提供最低限度的C ++支持。没有运行时间   类型信息(RTTI)和C ++异常支持,甚至是C ++   标准库支持,是部分的。以下是该列表   默认情况下,Android NDK支持C ++标头:

     

cassert,cctype,cerrno,cfloat,climits,cmath,csetjmp,csignal,cstddef,cstdint,   cstdio,cstdlib,cstring,ctime,cwchar,new,stl_pair.h,typeinfo,utility

     

可以通过使用不同的C ++添加更多C ++支持   库。 NDK附带了gabi ++,stlport和gnustl C ++   库,除了系统默认的一个。在我们的示例代码中,我们使用了   外部" C"包装C ++方法。这是为了避免C ++重写   JNI函数名称。 C ++名称修改可能会改变功能   名称包括有关参数的类型信息,是否   功能是否为虚拟,依此类推。虽然这使C ++能够链接   重载函数,它打破了JNI函数发现机制。

     

我们也可以使用覆盖的显式函数注册方法   加载本机库并注册本机方法的配方   第2章,Java Native Interface,摆脱包装。

如果在应用程序的逻辑中使用RTTI,那么它将无法在android上运行吗?

1 个答案:

答案 0 :(得分:3)

您可以将其启用,默认为关闭。要打开它,请将LOCAL_CPPFLAGS += -frtti添加到您的makefile中。像往常一样,带有此标志的代码将占用更多内存,在磁盘上更大,并且比关闭它的代码稍慢。