android ndk中的unicode支持
我有一个很大的C/C++库,我需要将它作为Android NDK项目的一部分使用。该库需要能够智能地处理UTF8字符串(例如,转换为小写/大写) 该库具有条件编译功能,可将其转换为操作系统API,但似乎没有任何适用于UTF8的Android API。(MBCS等) 说使用JNI方法来做(!),这是一个相当重的解决方案 我曾考虑过构建,但由于它使用GNU自动工具,我不确定是否可以使用NDK工具链来实现它/ 除了使用JNI,还有其他人遇到过这个问题并做过其他事情吗 编辑:我试图让ICU编译的尝试在配置步骤失败:android ndk中的unicode支持,android,unicode,utf-8,android-ndk,icu,Android,Unicode,Utf 8,Android Ndk,Icu,我有一个很大的C/C++库,我需要将它作为Android NDK项目的一部分使用。该库需要能够智能地处理UTF8字符串(例如,转换为小写/大写) 该库具有条件编译功能,可将其转换为操作系统API,但似乎没有任何适用于UTF8的Android API。(MBCS等) 说使用JNI方法来做(!),这是一个相当重的解决方案 我曾考虑过构建,但由于它使用GNU自动工具,我不确定是否可以使用NDK工具链来实现它/ 除了使用JNI,还有其他人遇到过这个问题并做过其他事情吗 编辑:我试图让ICU编译的尝试在配
checking wchar.h usability... no
checking wchar.h presence... yes
configure: WARNING: wchar.h: present but cannot be compiled
configure: WARNING: wchar.h: check for missing prerequisite headers?
configure: WARNING: wchar.h: see the Autoconf documentation
configure: WARNING: wchar.h: section "Present But Cannot Be Compiled"
configure: WARNING: wchar.h: proceeding with the preprocessor's result
configure: WARNING: wchar.h: in the future, the compiler will take precedence
checking for wchar.h... yes
checking for library containing wcscpy... none required
checking size of wchar_t... 0
configure: error: There is wchar.h but the size of wchar_t is 0
我们在NDK使用ICU。按照ICU跨大楼说明中的步骤进行操作,您会没事的。基本上,您将拥有一个ICU本机目录(例如Windows或Linux)、一个ICU Cygwin(如果使用这样的目录),还有一个ICU Android(ARM)。听起来很疯狂,但是很管用 以下是在Cygwin下构建的步骤。我使用的是“CrystaX”NDKR4,但它也应该使用现成的NDK。ICU版本4.4,但也适用于以前的版本
- 源/配置()
- source/Makefile.in()
- source/config/(将mh linux复制到mh未知)
- source/tools/pkgdata/pkgdata.cpp()
- 创建一个icu cygwin目录(我们称之为$icu\u交叉构建)
- 从icu cygwin目录运行“$HOST\u icu/source/runConfigureICU cygwin”
- 制造
- 创建一个android目录
- 来自icu android目录:“$HOST_icu/source/configure”,带有适当的命令行选项--交叉构建=需要$ICU\u交叉构建和--host=arm eabi
- 制造
-I$NDK_ROOT/build/platforms/android-8/arch-arm/usr/include/ -O3 -fno-short-wchar -DU_USING_ICU_NAMESPACE=0 -DU_GNUC_UTF16_STRING=0 -fno-short-enums -nostdlib
对于LDFLAGS:
-lc -Wl,-rpath-link=$NDK_ROOT/build/platforms/android-8/arch-arm/usr/lib/ -L$NDK_ROOT/build/platforms/android-8/arch-arm/usr/lib/
和其他配置参数:
--enable-extras=no --enable-strict=no --enable-static --enable-shared=no --enable-tests=no --enable-samples=no --enable-dyload=no --enable-tools=no --host=arm-eabi --with-data-packaging=archive
我已经有一段时间没有手动完成这项工作了,它目前都在一个自定义的基于Python的构建脚本中。如果你遇到任何其他麻烦,我可能会告诉你问题是什么
祝你好运 我编辑了这个问题,以展示当我尝试用NDK构建ICU时会发生什么。有趣的补丁,你应该考虑向他们提交一份申请单,我当然会。我真正的希望是Android开发者决定只公开一个完整的预装ICU,因为它已经在设备上使用了。目前还没有更新,但即使在NDK或ICU的较新版本上,它仍然可以工作。我一直在拖延向ICU提交任何东西,因为他们已经改变了他们的构建系统,使类似的事情变得更容易。在不久的将来,我计划将一些项目升级到最新的ICU,并尝试实现一些更干净的东西并提交。@tofutim最终提交了这个补丁。在52号重症监护室。你有没有让它工作过?@tofutim没有,但我也没能重温它。正好遇到这个问题。添加了ICU标签。完全忽略了这个问题。在OSX上编译android的49.1.2版本中,我又遇到了同样的问题(