【问题标题】:Include ICU in Android NDK Project在 Android NDK 项目中包含 ICU
【发布时间】:2013-08-16 14:58:11
【问题描述】:

我用 C++ 构建了一个库,我想使用 NDK 将它包含在我的 Android 应用程序中。但是,我的图书馆需要使用 ICU4C。 我一直在尝试为 Android 编译 ICU,我在这里查看了很多关于 SO 的问题,但我仍然无法将 ICU 编译为 Android 的 .a 文件。我不确定执行此操作的最佳方法。 有人用 NDK 在 ICU 上取得成功吗?

顺便说一句,我希望使用 ICU 51.2,除非有充分的理由使用旧版本。

【问题讨论】:

    标签: c++ c android-ndk java-native-interface icu


    【解决方案1】:

    您可以通过在 Android.mk 中指定这些标志来将 ICU 构建为 Android 静态库

    LOCAL_CFLAGS := -DANDROID -fdata-sections -ffunction-sections
    LOCAL_CPPFLAGS := -DANDROID -frtti -fno-exceptions -fdata-sections -ffunction-sections
    

    如果您毫无例外地使用 Android NDK,则需要破解缺失的 cxa_bad_typeid()

    extern "C" std::type_info const& __cxa_bad_typeid()
    {
       // just return something
       return typeid(void*);
    }
    

    【讨论】:

    • extern "C" 是为了避免__cxa_bad_typeid 的名称混淆吗?如果是这样,您是否知道解决链接器警告的方法:“__cxa_bad_typeid 已指定 C 链接,但返回与 C 不兼容的用户定义类型 'const std::type_info &'”。我可以禁用警告,但我想知道是否有适当的方法来解决此问题。
    • @meowsqueak 你可以使用void* __cxa_bad_typeid(),但是这个hack 会更糟糕并且类型不安全。
    猜你喜欢
    • 2012-08-06
    • 2011-08-03
    • 2011-05-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-05-11
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多