トップ 検索 一覧 ヘルプ RSS ログイン

今更MinGW 2009.06(7) iconv,libxml2の変更点

  • 追加された行はこのように表示されます。
  • 削除された行はこのように表示されます。
!!!今更MinGW 2009.06(7) iconv,libxml2

iconvとlibxml2は非常に裏方的ライブラリだ。iconvは文字セットの変換を行うライブラリで、libxml2はXMLを操作するライブラリになる。これらを使用しているソフトウェアを利用していても、その存在を意識しないことは多いだろう。
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]]だ。