!!!今更MinGW 2009.06(7) iconv,libxml2 iconvとlibxml2は非常に裏方的なライブラリだ。iconvは文字セットの変換を行うライブラリで、libxml2はXMLを操作するライブラリになる。これらを使用しているソフトウェアを利用していても、その存在を意識しないことは多いだろう。 iconvはmingwPORTにもあるが、執筆時点では1.11と最新の1.13より古いため、オリジナルからビルドする。 !iconvのcp932パッチ Windows上で使用するに当たって、より''Windowsアプリらしい動作にするためのパッチ''を導入する。WindowsのOSレベルでは、マイクロソフト的Shift_JISであるcp932とUnicode間の変換において、''標準的なマッピングとは異なるマッピング''を使用している。このパッチは、本来iconvが標準的なマッピングを使用するところを、''Windowsの変換と同じマッピングを使用するように変更する''ものだ。 これを適用しない場合、iconvを使用するソフトウェアを作成すると、''本来意図する文字とは別の文字が使用され、様々な不具合を発生する''可能性がある。特にファイル名の変換を行う場合、存在するはずのファイルが発見できないといった、''通常想定しないエラー''になり、頭を悩ませることになる。一見似た文字にマッピングされるあたり、なおのこと気づきにくいバグになるだろう。 Windowsのマッピングが正しいわけではないだろうが、正しいマッピングを使用することでMinGWで作成するソフトウェアが動作しないようでは困るので、猫科研究所ではパッチを適用することをお勧めする。 !!ソースの入手 *[libiconv|http://www.gnu.org/software/libiconv/] **http://ftp.gnu.org/pub/gnu/libiconv/libiconv-1.13.tar.gz *[libiconv パッチ集|http://www2d.biglobe.ne.jp/~msyk/software/libiconv-patch.html] **http://www2d.biglobe.ne.jp/~msyk/software/libiconv/libiconv-1.13-ja-1.patch.gz *[The XML C parser and toolkit of Gnome libxml|http://www.xmlsoft.org/] **ftp://xmlsoft.org/libxml2/libxml2-sources-2.7.3.tar.gz いずれも/srcに展開しよう。 !パッケージの説明 上記で説明しているので省略する。 !!ビルド !libiconv パッチを当てる以外は特別な点はない。 pushd /src/libiconv-1.13 patch -p1 -N < ../libiconv-1.13-ja-1.patch ./configure --prefix=/mingw --enable-static --disable-shared make make install --enable-staticはstaticライブラリを作成する指定で、--disable-sharedは.DLL版のライブラリを作成させないオプションだ。猫科研究所ではstaticライブラリを推しているため、頻出のオプションである。 !libxml2 いくつかオプションを指定する以外は特別な点はない。 pushd libxml2-2.7.3 ./configure --prefix=$flinstpath --enable-static --disable-shared \ --without-debug --without-legacy --without-modules make make install configureの行は若干長いので\で改行してる点に注意。--without-debug --without-legacy --without-modulesは一般的とは限らないオプションで、libxml2固有と思った方がよい。それぞれデバッグ不要、旧インターフェース不要、dynamicモジュール不使用の指定である。 なお、libxml2はpthreadが存在すると自動的にpthreadを使用するマルチスレッド版をビルド・インストールしようとする。pthreadは様々な注意が必要なので、猫科研究所では推奨しない。[[GCCにTDM版を使用している場合、注意が必要|今更MinGW 2009.06(3) MinGW]]だ。