Включить ICU в проект Android NDK

Я создал библиотеку на C++, которую хочу включить в свое приложение для Android с помощью NDK. Однако моя библиотека должна использовать ICU4C. Я пытался скомпилировать ICU для Android, и я рассмотрел много вопросов здесь, на SO, но я все еще не могу скомпилировать ICU в файлы .a для Android. Я не уверен, что это лучший способ сделать это. У кого-нибудь был успех в отделении интенсивной терапии с NDK?

Кстати, я надеялся использовать ICU 51.2, если нет веской причины использовать более старую версию.


person SZH    schedule 14.08.2013    source источник


Ответы (1)


Вы можете создать ICU как статическую библиотеку Android, указав эти флаги в вашем Android.mk

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*);
}
person Sergey K.    schedule 21.08.2013
comment
Является ли extern "C", чтобы избежать искажения имени __cxa_bad_typeid? Если да, то знаете ли вы, как устранить предупреждение компоновщика: __cxa_bad_typeid имеет указанную связь с C, но возвращает определяемый пользователем тип 'const std::type_info &', который несовместим с C. Я могу отключить предупреждение, но Я хотел бы знать, есть ли правильный способ исправить это. - person davidA; 08.05.2016
comment
@meowsqueak Вы можете использовать void* __cxa_bad_typeid(), но этот хак будет еще хуже и небезопасен для типов. - person Sergey K.; 08.05.2016