编译ICU for Android:错误:'ICU_Utility'尚未声明

时间:2012-03-20 03:32:06

标签: android android-ndk icu

在为Android编译ICU时遇到以下错误:

/home/tim/icu49/icu/source/i18n/strmatch.cpp: In member function 'virtual icu_49::UnicodeString& icu_49::StringMatcher::toPattern(icu_49::UnicodeString&, UBool) const':
/home/tim/icu49/icu/source/i18n/strmatch.cpp:166: error: 'ICU_Utility' has not been declared
/home/tim/icu49/icu/source/i18n/strmatch.cpp:168: error: 'ICU_Utility' has not been declared
/home/tim/icu49/icu/source/i18n/strmatch.cpp:176: error: 'ICU_Utility' has not been declared
/home/tim/icu49/icu/source/i18n/strmatch.cpp: In member function 'virtual icu_49::UnicodeString& icu_49::StringMatcher::toReplacerPattern(icu_49::UnicodeString&, UBool) const':
/home/tim/icu49/icu/source/i18n/strmatch.cpp:243: error: 'ICU_Utility' has not been declared
make[1]: *** [strmatch.ao] Error 1
make[1]: Leaving directory `/home/tim/icu49/icu-android/i18n'
make: *** [all-recursive] Error 2

更新。作为一个黑客,这可以通过-DUCONFIG_NO_TRANSLITERATION解决(基本上忽略了违规的阻止)。这样做会让你超过'strmatch.cpp',但错误会重新出现在dbgutil.cpp:143和145中。使用-DUCONFIG_NO_FORMATTING修复(丢失另一个功能......)(下一期:函数icu_49::IcuToolErrorCode::~IcuToolErrorCode()': toolutil.cpp:(.text+0x400): undefined reference to __ cxa_end_cleanup “)

Update2。这个很奇怪。我解除了配置更改。在i18n / strmatch.cpp中,包含“util.h”。但它似乎永远不会被称为ICU_Utility未定义的原因。 (“util.h”在icu / source / common中)。有趣的是,如果使用#include“../common/util.h”而不是#include“util.h”,它就可以工作。

当然,现在这是有道理的,因为

tim@N01:~/icu49$ find android-ndk-r7b/ -name util.h
android-ndk-r7b/platforms/android-4/arch-x86/usr/include/util.h
android-ndk-r7b/platforms/android-4/arch-arm/usr/include/util.h
android-ndk-r7b/platforms/android-8/arch-x86/usr/include/util.h
android-ndk-r7b/platforms/android-8/arch-arm/usr/include/util.h
android-ndk-r7b/platforms/android-14/arch-x86/usr/include/util.h
android-ndk-r7b/platforms/android-14/arch-arm/usr/include/util.h
android-ndk-r7b/platforms/android-3/arch-x86/usr/include/util.h
android-ndk-r7b/platforms/android-3/arch-arm/usr/include/util.h
android-ndk-r7b/platforms/android-5/arch-x86/usr/include/util.h
android-ndk-r7b/platforms/android-5/arch-arm/usr/include/util.h
android-ndk-r7b/platforms/android-9/arch-x86/usr/include/util.h
android-ndk-r7b/platforms/android-9/arch-arm/usr/include/util.h

1 个答案:

答案 0 :(得分:2)

将android-X版本从util.h重命名为_util.h,可以快速解决此问题。