6

icuに静的にリンクされたicu sqlite 拡張機能をコンパイルしたいと考えています。

これは私が試したものです。間違いは明らかです。

> cd icu/ソース
> ./runConfigureIcu Linux --enable-static --with-packaging-format=アーカイブ
...
>作る

> cd ../../icu-sqlite
> gcc -o libSqliteIcu.so -shared icu.c -I../icu/source/common
      -I../icu/source/i18n -L ../icu/source/lib -lsicuuc -lsicui18n -lsicudata
...
> sqlite3
> .load "libSqliteIcu.so"
未定義のシンボル utf8_countTrailBytes

ファイル

icu sqlite 拡張機能

sqlite.org から icu.c をダウンロードします。

ICU 4.2.1

icu-project.org から ICU4C をダウンロードします。

私の要件

  • Linux と Windows で実行
  • 配布する必要があるファイルは 1 つだけです: libSqliteIcu.so.

他に何を試すことができますか?

ドキュメンテーション

4

2 に答える 2

3

このコマンドラインは、Linuxで機能しました。

g++ -shared --language c  -o libSqliteIcu.so icu.c  -I../icu/source/common -I../icu/source/i18n -lpthread -lm   -L../icu/source/lib -lsicui18n -lsicuuc -lsicudata  -lpthread -lm 

ライブラリファイルの順序と、Cファイルをコンパイルしている場合でもc++ランタイムが参照されていることを確認するためのg++の使用に注意してください。

NB。の出力を使用しましたicu-config --prefix=../icu/source --ldflags

于 2009-12-05T22:32:28.433 に答える
1

私はあなたと同じ問題に遭遇しました。icu\include\utf8.h を編集して、次の行を置き換えることができます

          #ifdef U_UTF8_IMPL
          U_EXPORT const uint8_t
          #elif 定義 (U_STATIC_IMPLEMENTATION) || 定義済み(U_COMMON_IMPLEMENTATION)
          U_CFUNC const uint8_t
          #そうしないと
          U_CFUNC U_IMPORT const uint8_t /* U_IMPORT2? */ /*U_IMPORT*/
          #endif
          utf8_countTrailBytes[256];

              const uint8_t countTrailBytes[256];

これでうまくいくはずです。

于 2010-05-31T20:32:17.377 に答える