ICU(1) ICU Unicodeライブラリを古いVC++で環境設定する
概要 :
今回は、ICUです。これも非常に有名なUNICODEライブラリです。
ICUは、UNICODEを扱うためのライブラリです。クロスプラットフォームに対応しており、Linux系でのUNICODE制御には、よく用いられているようです。
また、BOOSTなどの他のライブラリでもUNICODEを扱う場合、一般的にICUとリンクすることがよくあります。
ICUの最新版では、VC++の最新版への対応(プロジェクトファイル)のみを行っています。
そのため、VC++の最新版でコンパイルを行う場合は、ソリューションを開いてビルドするだけで良いです。
(%ICUインストールディレクトリ%\icu\source\allinone\allinone.sln)
ただ、古いVC++で、コンパイル(インストール)を行う場合は、少し手間が必要となります。
今回は、その環境設定について記載しておきます。
ダウンロード
ここで使用したサンプルソースコード:
必要なものを揃えて、コンパイル
必要なもの
以下のものが必要となります。
コンパイルを始める前に、全てを準備します。
- VC++ 2003 , 2005 のいずれかが必要です。
2003は、ToolKit+Standard の組み合わせか、上位エディションで最適化可能なものを揃えましょう。
- Cygwin
序気のダウンロード先から、Setup.exeをダウンロードします。
Setup.exeを起動してインストールを始めます。
簡単に注意点を記載しておきます。
ここで必要な機能は、bashとmakeの2つです。
- "次へ"をクリックします。
- "Install from Internet ... "にチェックをします。
※必要な最新のファイルをインターネットからダウンロードしてインストールします。
"次へ"をクリックします。
- インストール先のディレクトリを指定します。
(インストール先ディレクトリ名は、空白や"-"などの記号が無い方が無難です。)
デフォルトで使用するファイル形式を"DOS ... "に設定します。
※ICUのファイルは、改行コードがWindowsと同じCRLFとなっています。ここを設定しておかないと変なエラーがでます。
設定の後、"次へ"をクリックします。
-
ダウンロードしたファイルの格納ディレクトリを指定します。
デフォルトの設定ディレクトリで問題なければ、そのままで良いと思います。
設定の後、"次へ"をクリックします。
-
デフォルトの"Direct ..."を指定して"次へ"をクリックします。
-
ダウンロードするサイトを指定します。
自分の住んでいる国のサイトがれば、そのサイトを指定した方が良いでしょう。
例えば、あなたが、日本人であれば、"xxxx.jp"のサイトを指定した方が良いでしょう。
-
ここで、"Devel"の階層の中に"make : The GNU ..."を探してチェックします。
(デフォルトではSkipになっていますのでインストールされません。)
-
ダウンロードしてインストールを実行している画面です。
-
"完了ボタン"をクリックして完了です。
- ICUのソース一式
先のダウンロード先から、icu4c-4_xxx-src.zipファイルをダウンロードし、インストールするディレクトリへそのまま解凍します。
Cygwinは、bashはデフォルトでインストールされますが、makeは、インストールされないので、上記のように指定してあげないといけません。
環境設定とコンパイル(ビルド)
上記のように必要なものがそろったら、以下の手順で、コンパイルを実行します。
- VC++ 2003 , 2005 のいずれかのコマンドプロンプトを起動します。
- 起動したコマンドプロンプトから、Cygwinへのパスを設定します。
1
2
| C:\> set path=%path%;c:\cygwin\bin
C:\>
|
この例では、cygwinのインストール先が"c:\cygwin"としています。
※cygwinのパスは、最後に追加しましょう。
- 起動したコマンドプロンプトから、ArciverのコマンドのパスをCygwinへのパスとして設定します。
1
2
| C:\> set AR=c:\cygwin\bin
C:\>
|
この例では、cygwinのインストール先が"c:\cygwin"としています。
- ICUを解凍したディレクトリへ移動します。
1
2
3
| C:\> cd \ICU
C:\ICU> cd icu\source
C:\ICU\icu\source>
|
この例では、ICUの解凍先が"c:\ICU"としています。
更に、icu\sourceへ移動することに注意してください。
- ICUのmakeファイルを作り直します。
1
2
3
4
5
| C:\ICU\icu\source> bash ./runConfigureICU Cygwin/MSVC
:
:
:
C:\ICU\icu\source>
|
この例では、VC++2003でのコマンドイメージです。
VC++2005を使用する場合、"Cygwin/MSVC2005"を指定します。
ここで特にエラーの表示が無ければOKです。
- 作成したmakeファイルでビルドします。
1
2
3
4
5
| C:\ICU\icu\source> make
:
:
:
C:\ICU\icu\source>
|
ここのmakeコマンドは、CygwinでインストールしたGNU Makeでなければいけません。
動作がおかしい場合は、他の環境の別のmakeが動作していないかチェックしましょう。
ここで特にエラーの表示が無ければ環境ができています。
ここまでにエラーが発生するよう場合は、ご自身の環境に誤りがあります。
例えば、mingwなどを併用しているような場合、正しくCygwinのコマンドが実行されていないなどの影響もありますので、
エラーが発生したら、まずは、環境(特にPATH)を見直してみましょう。
開発環境を整える
ICUを使うためには、IncludeパスとLibraryパスへ、ICUのそれぞれのパスを追加する必要があります。
ここでは、ICUのDLLが作成されました(icu\source\libを確認してください)。そのため、環境設定で、PATHにDLLのあるパスを追加します。
今回は、VC++ 2003 のIDEを使いますので、その環境設定を行ってみましょう。
- VC++ 2003 を立ち上げます
- メニューの[ ツール ] - [ オプション ] - [ プロジェクト ] - [ VC++ディレクトリ ]を開きます。
ここで、
"インクルードファイル"に、"C:\ICU\icu\source\common"を追加します。
"ライブラリファイル"、"実行可能ファイル"に、"C:\ICU\icu\source\lib"を追加します。
設定を終えたら、OKボタンをクリックします。
VC++でサンプルをビルドしてみましょう。
VC++のプロジェクト作成で、空のコンソールアプリケーションを作成します。
そのプロジェクトへ以下のソースコードを貼り付けたcppファイルを作成します。
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
| #include <stdio.h>
#include <iostream>
#include <unicode/ucnv.h>
using namespace std;
// ライブラリを指定しておく
#pragma comment(lib, "icuuc.lib")
int main()
{
const wchar_t *porg=L"テスト日本語のテスト、UNICODEからShiftJis!!";
UErrorCode error = U_ZERO_ERROR;
int nosize=(int )wcslen(porg);
int ndsize=nosize*2+sizeof(int);
char *abuff=new char[ndsize];
int ncsize = ucnv_convert(
"shift_jis","utf-16le",abuff,ndsize,(const char *)porg,nosize*2,&error);
cout << abuff << endl;
delete []abuff;
return 1;
}
|
さあ、ビルドしてみてください。
コンパイルおよびリンクが完了できれば、OKです。
上記のコードがコンパイルできない場合は、環境に誤りがあります。パスの環境を見直してみてください。
上記のプログラムは、実際に動作させると以下のようにコンソールがひらき、そこに文字化けせずに以下のように表示されればOKです。
1
| テスト日本語のテスト、UNICODEからShiftJis!!
|
これで、VC++の前のバージョン(2003以前のバージョンではコンパイルできません)でもICUが使えるようになります。
他の色々なライブラリでも利用されているICUですので、一度、お試しいただくのも良いと思います。
もっと、UNICODE関連について詳しく知りたい方は、以下の本なども良いと思います。
本から学ぶことは多いと思います。ネットだけでは判らない様々な事に気づかされます。
コメントをどうぞ