ページ

2015年3月2日月曜日

ICUのスタティックライブラリ

ちと作成中のプログラムで文字コード変換したかったのでICU(International Components for Unicode)を使ってみることにしました。
ただ、ここからダウンロードできるバイナリはDLL形式なので、できればスタティックリンクしたいのでどうすればいいかなと調べていたところ、以下のサイトで解説してくれていました。

http://jumble-note.blogspot.jp/2013/01/icucmsvcicu.html

こちらを元に私は「54.1」というバージョンで試してみました。
このバージョンでは以下を試すことで成功しました。
  • 「構成の種類」をdllからlibに変更
  • プリプロセッサ「U_STATIC_IMPLEMENTATION」を追加
  • 出力ファイル名を変更
  • icudt.libを生成
では具体的な説明をしましょう。
まずallinone.slnを開き、ソリューションエクスプローラーで「構成の種類」で「ダイナミック ライブラリ (.dll)」となっているプロジェクトをすべて「スタティック ライブラリ (.lib)」にします。


次にソリューションエクスプローラーで「makedata」プロジェクト”以外”のプロジェクトをすべて選んで、プリプロセッサの定義に「U_STATIC_IMPLEMENTATION」を追加します。


お次は出力ファイル名を変更。これをしないとダメらしい。よく確認していないですが、詳細は↑のサイトをご覧ください。


これを5つのプロジェクトに対して実施します。

 common → icuuc
 i18n → icuin
 io → icuio
 layout → icule
 layoutex → iculx

最後にicudt.libを作ります。「VS2013 x64 Cross Tools コマンドプロンプト」を使います。以下はデバッグ版を作成する例です。(ファイルタイトルの最後に「d」を付けるのを忘れずに。)


これで出来上がった六つのファイルを使用したいアプリケーションでリンクするだけです。
ちなみにICUはいろんな文字コードの変換ができますが、利用するコードが少ない場合には、以下のサイトでカスタマイズできます。

http://apps.icu-project.org/datacustom/

以下のサイトで解説してくれています。

http://qiita.com/shimacpyon/items/652281d6b28572fd434d

私はShift-JISからUTF-8への変換しかしなかったので非常に参考になりました!