gpt4 book ai didi

android - android ndk中的unicode支持

转载 作者:塔克拉玛干 更新时间:2023-11-01 22:04:10 25 4
gpt4 key购买 nike

我有一个大型 C/C++ 库,我需要将其用作 Android NDK 项目的一部分。该库需要能够智能处理 UTF8 字符串(例如,转换为小写/大写)。

该库具有条件编译功能,可用于转至 OS API 以进行转换,但似乎没有任何适用于 UTF8 的 Android API。 (mbstowcs 等)

This thread说使用 JNI 方法来完成它(!),这是一个相当重量级的解决方案。

我正在考虑构建 ICU ,但由于它使用 GNU Autotools,我不确定我能否使其与 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 native 目录(例如 Windows 或 Linux)、一个 ICU Cygwin(如果使用此类目录)和另一个用于 ICU Android (ARM) 的目录。听起来很疯狂,但确实有效!

以下是在 Cygwin 下构建的步骤。我正在使用“CrystaX”NDK r4,但它也应该使用开箱即用的 NDK 构建。 ICU 4.4 版,但也适用于以前的版本。

  1. 补丁:

  2. 按照正常方式构建 ICU 的主机版本(例如 Windows)。 (我们称之为 $HOST_ICU)

  3. 构建 Cygwin ICU:

    • 创建一个 icu-cygwin 目录(我们称之为 $ICU_CROSS_BUILD)
    • 从 icu-cygwin 目录,运行“$HOST_ICU/source/runConfigureICU Cygwin”
    • 制作
  4. 构建 NDK 版本的 ICU:

    • 创建一个icu-android目录
    • 从 icu-android 目录:'$HOST_ICU/source/configure' 中使用适当的命令行选项。 --with-cross-build=$ICU_CROSS_BUILD 和 --host=arm-eabi 是必需的。
    • 制作

我使用类似这样的东西传入(到步骤#4)CPPFLAGS/CXXFLAGS/CFLAGS:

-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 的构建脚本中。如果您遇到任何其他问题,我可能会告诉您问题出在哪里。

祝你好运!

关于android - android ndk中的unicode支持,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3944207/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com