为Android编译ICU:错误:';ICU公用事业公司';尚未申报

为Android编译ICU:错误:';ICU公用事业公司';尚未申报,android,android-ndk,icu,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:

为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\u NO\u音译解决(基本上忽略有问题的块)。这样做会使您通过'strmatch.cpp',但错误会重新出现在dbgutil.cpp:143和145中。可使用-DUCONFIG\u NO\u格式进行修复(丢失另一个功能…)(下一期:在函数
icu\u 49::icutoolercode::~icutoolercode()’:
toolutil.cpp:(.text+0x400):未定义对
\uuucxa\uend\ucleanup'的引用)

更新2.这一个非常奇怪。我取消了配置更改。在i18n/stratch.cpp中,包括“util.h”。但它似乎从未被调用,这就是为什么没有定义ICU_效用的原因。(“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

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