11

AndroidNDKプロジェクトの一部として使用する必要のある大きなC/C++ライブラリがあります。このライブラリは、UTF8文字列をインテリジェントに処理できる必要があります(たとえば、小文字/大文字への変換)。

ライブラリには、変換を行うためにOS APIにパントする条件付きコンパイルがありますが、UTF8用のAndroidAPIはないようです。(mbstowcsなど)

このスレッドは、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
4

1 に答える 1

11

NDK で ICU を使用しています。ICU クロス構築手順の手順に従ってください。問題ありません。基本的に、ICU ネイティブ ディレクトリ (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. ICU の NDK バージョンをビルドします。

    • icu-android ディレクトリを作成する
    • icu-android dir から: '$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 ベースのビルド スクリプトに含まれています。他に問題が発生した場合は、問題の内容をお伝えできると思います。

幸運を!

于 2010-10-16T02:13:44.700 に答える