我用C++编写了一个库,想要在我的Android应用程序中使用NDK来包含它。然而,我的库需要使用ICU4C。
我一直在尝试为Android编译ICU,并查看了许多关于此的问题,但我仍然无法将ICU编译成.a文件以供Android使用。我不确定最佳方法是什么。
有没有人成功地在NDK中使用ICU?
顺便说一下,我希望使用ICU 51.2版本,除非有充分的理由使用旧版本。
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й“ҫжҺҘпјҢдҪҶиҝ”еӣһдёҖдёӘдёҺCдёҚе…је®№зҡ„з”ЁжҲ·е®ҡд№үзұ»еһӢ'const std :: type_infoпјҶ'гҖӮвҖқжҲ‘еҸҜд»ҘзҰҒз”ЁиӯҰе‘ҠпјҢдҪҶжҲ‘жғізҹҘйҒ“жҳҜеҗҰжңүйҖӮеҪ“зҡ„ж–№жі•жқҘи§ЈеҶіиҝҷдёӘй—®йўҳгҖӮ - davidAvoid* __cxa_bad_typeid()
,但这种方法更糟糕且不安全。 - Sergey K.