Android CMake构建默认添加无例外和无rtti

时间:2016-10-12 13:44:12

标签: android c++ android-ndk

我正在尝试将现有的基于Android.mk的构建转换为CMake,并且我在构建具有异常和rtti的CPP代码时遇到了困难。生成的cpp build命令默认包含-fno-exceptions-fno-rtti。将它们添加为ANDROID_CPP_FEATUREScppFlags只会在默认选项和构建仍然失败后将它们附加到构建命令。

我搜索了很多,除了与Android上的CMake相关的几页之外,我从搜索中获得了大部分旧的Android.mk结果。

任何一个CMakeLists.txt文件都没有什么特别之处,没有任何可以添加这些选项的内容。

以下所有未注释的选项均无效。

的build.gradle:

    externalNativeBuild {
        cmake {
            arguments '-DANDROID_TOOLCHAIN=gcc',
                       '-DANDROID_PLATFORM=android-19',
                     //  '-DANDROID_STL_FORCE_FEATURES=ON',
                       '-DANDROID_STL=gnustl_static'
                     //'-DANDROID_CPP_FEATURES=rtti'
                     //'-DANDROID_CPP_FEATURES=exceptions',

            cppFlags "-fexceptions -frtti"
            targets  'library2'
        }

    }

构建命令中的选项:

   <removed content> -g -DANDROID -ffunction-sections -funwind-tables -fstack-protector-strong -no-canonical-prefixes -Wa,--noexecstack -Wformat -Werror=format-security -fno-exceptions -fno-rtti -frtti -fexceptions -frtti -O2 -DNDEBUG  -fPIC -MD -MT <additional content>

2 个答案:

答案 0 :(得分:1)

使用NDK工具链r13b我在gradle中使用这个组合。通过我的部分是重复-DANDROID_CPP_FEATURES覆盖自己,你需要一个空格而不是exceptionsrtti之间的逗号。

externalNativeBuild {
    cmake {
         cppFlags '-std=c++11'
         arguments '-DANDROID_TOOLCHAIN=clang',
                 '-DANDROID_PLATFORM=android-19',
                 '-DANDROID_STL=gnustl_static',
                 '-DANDROID_ARM_NEON=TRUE',
                 '-DANDROID_CPP_FEATURES=exceptions rtti'
    }
}

答案 1 :(得分:0)

似乎cppFlags确实启用了异常和rtti,即使所有四个选项都在命令行上。我看到了一个不同的错误。