2012-03-20 83 views
1

在編制Android的ICU,遇到以下錯誤:爲Android編譯ICU:錯誤: 'ICU_Utility' 尚未聲明

/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」,它可以工作。

當然,現在這個是有道理的,因爲

[email protected]:~/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 

回答

2

重命名從util.h了android-X版本_util.h提供快速解決這個問題。