ICU4Cユニコードライブラリをバージョン4.2.1(Ubuntu 10.04にパッケージ化されているバージョン)で使用します。私は簡単なテストコードを作った。正規表現オブジェクトを開くだけです。静的リンクICU4Cがuregex関数を失敗させる
#include <stdio.h>
#include <unicode/utypes.h>
#include <unicode/uregex.h>
int main() {
UChar zPattern[4] = {'a', 'b', 'c', 0};
UErrorCode status = 0;
URegularExpression *pExpr = uregex_open(zPattern, -1, 0, 0, &status);
return status;
};
私は、動的にリンクされたICUライブラリを使用してコンパイルし、実行しました、以下のように:
gcc -o test.out test.c -licui18n -licuuc -licudata -lpthread -lm
./test.out
と結果ステータスコードは '0' でした。魅力的に働いた。
は今、私は静的に以下のようなICUライブラリをリンクすることを決めた、と
gcc -o test.out -DU_STATIC_IMPLEMENTATION test.c -lsicui18n -lsicuuc -lsicudata -lpthread -lstdc++ -lm
./test.out
と結果のステータスコードを実行した「1」でした。 uregex_open関数がステータスコード 'U_ILLEGAL_ARGUMENT_ERROR'で失敗しました。
私は静的にICU4Cをリンクするものがありませんでしたか?
私は、ubuntuにパッケージされているlibsicudata.aファイルが非常に小さいことを知りました(約1kb)。私は、このライブラリファイルの外に存在するかもしれないデータファイルをどのように使用できるかを理解できませんでした。だから私は静的なicuライブラリを自分で構築し、私のプロジェクトにリンクさせることにしました。どうもありがとう! – araste
ようこそ!たぶん何かについてバグを報告する何か。もう1つの選択肢は、Macプラットフォーム上の/usr/share/icu/icudt*.datなどのファイルからデータをロードすることです。プロジェクトのニーズに応じて(たとえば、変換、照合、ロケールなどのデータが必要ない場合もあります)、データカスタマイザを使用してデータをカスタマイズすることで、スペースを節約できます。 http://userguide.icu-project.org/icudataを参照してください。 –