!!!今更MinGW 2009.06(6) zlib,libjpeg,libpng 非常に良く使用されるライブラリのzlib, libjpeg, libpngをビルド・インストールする。 zlib, libjpeg, libpngは全て[mingwPORT|http://sourceforge.net/project/showfiles.php?group_id=2435&package_id=233332](詳細は今更MinGW2008年春版の[[今更MinGW(2)]]を参照)という仕組みが用意されており、簡単にMinGW環境に組み込めるようになっている。しかし、猫研パックでは質問項目を省略するためzlibのパッチのみを使用し、通常の手順でビルドする。また、libjepgのmingwPORTはIJGのオリジナル(後述)向けのもので、libpngはバージョンが1.2.8と古いこともmingwPORTを使用しない理由である。 なお、ここではlibjpegにx86の''SIMDを利用して高速化されているバージョン''を使用する。当該サイトの説明を読めばわかるが、基本的にオリジナルのlibjpegと同様に扱え、かつ一部のケースでは精度が向上するなど、''機能的にも改良されている''。オリジナルのlibjpegは[Independent JPEG Group|http://www.ijg.org/]だ。 !!ソースの入手 以下のソースアーカイブを入手し、/src以下に展開しよう。 *[zlib Home Site|http://www.zlib.net/] **http://www.zlib.net/zlib-1.2.3.tar.gz *[User Contributed: mingwPORT|http://sourceforge.net/project/showfiles.php?group_id=2435&package_id=233332] / [Current Releases|http://sourceforge.net/project/showfiles.php?group_id=2435&package_id=233332&release_id=511579] **[zlib-1.2.3-mingwPORT-1.tar.bz2|http://sourceforge.net/project/downloading.php?group_id=2435&filename=zlib-1.2.3-mingwPORT-1.tar.bz2] *[Independent JPEG Group's JPEG software release 6b with x86 SIMD extension for IJG JPEG library version 1.02|http://cetus.sakura.ne.jp/softlab/jpeg-x86simd/jpegsimd.html] **http://cetus.sakura.ne.jp/softlab/jpeg-x86simd/sources/jpegsrc-6b-x86simd-1.02.tar.bz2 *[libpng Home Page|http://www.libpng.org/pub/png/libpng.html] **http://prdownloads.sourceforge.net/libpng/libpng-1.2.37.tar.bz2?download ''libpngはまだ枯れているとは言い難く''、よくセキュリティ関連で更新が行われるので、上記のバージョンにこだわらず''最新版を使用したほうがよい''。 各ソースアーカイブは/srcに展開しよう。 !パッケージの説明 簡単に。 ::zlib :::言わずと知れた、データの圧縮・展開ライブラリ。 :::''一見圧縮とは関係のないソフトウェアにも必要とされる''ので必須と言っていい。 ::libjpeg :::JPEGの圧縮・展開ライブラリ。 :::静止画を扱うソフトウェアでJPEGがサポートされないケースはほとんど無いので、 :::これも高頻度に利用される。 ::libpng :::GIFのLZW特許問題が発生してから代替として開発されたPNG形式を扱うライブラリ。 :::その後Unisys社の特許は有効期限が切れたものと見なされているが、 :::単なるGIFのリプレースではなく''24bit色やαチャンネルが扱える''など、 :::可逆圧縮画像形式として優れているため、GIFと同様、広範に利用されている。 !!ビルド いずれも、若干の特別な手順が入る。 !zlib アセンブラ使用のバージョンでビルドするため、mingwPORTのパッチ当て後にcontrib/asm686/match.S(アセンブラソース)をトップディレクトリにコピーし、makeコマンドへのパラーメータをそれに応じたものとする。 pushd /src/zlib-1.2.3 patch -p1 -N < mingwPORT/mingwPORT.patch cp -f contrib/asm686/match.S . make -f win32/Makefile.gcc LOC=-DASMV OBJA=match.o CFLAGS="-O3 -s -mms-bitfields -march=i686" make -f win32/Makefile.gcc install prefix=/mingw popd なお、このままではzlibを使用する際に、.DLLへのリンクが優先されるようになる。猫研パックではstaticリンクを是としているので、以下のように.DLL向けのライブラリをリネームし、待避させる。 pushd /mingw/lib mv -f libz.dll.a libz.dll.a.esc mv -f libzdll.a libzdll.a.esc popd もちろん好みで.DLL版を使用しても構わないが、猫科研究所の記事は全てstatic版で記載しているので注意。 !libjpeg libjpegはSIMD命令による高速化版を使用するため、mingwPORTは使用できない。また、Windows上のビルドでは''MSYSではなくコマンドプロンプトでのビルドが想定されている''ため、MSYSで使用するためにはmakefile.mgwを変更する必要がある。 具体的には、まずnasm'''w'''を用意していない場合、25行目でnasmwを使用している箇所をnasmに変更する必要がある。そして49行目でRMをdelコマンドに割り当てているのでrmに変更する。そして179行目でmakecfg.exeの起動が.\makecfg.exeとWindows流の表記になっているので./makecfg.exeに書き換える。なお、猫研パックではこの修正はパッチを用意しており、そちらで行う。 ビルド手順は以下の通り。 pushd jpeg-6bx cp -f jconfig.mgw jconfig.h cp -f makefile.mgw Makefile make cp -f libjpeg.a /mingw/lib cp -f jpeglib.h /mingw/include cp -f jerror.h /mingw/include cp -f jconfig.h /mingw/include cp -f jmorecfg.h /mingw/include popd MSYSを使用しない前提であるためmake installもない。このため手動(cp)で導入している。 !libpng インストール時のエラーを修正するためにperlで簡単なパッチを当てる以外は、普通にビルドできる。 pushd libpng-1.2.37 perl -pe 's:^\tinstall:\t/bin/install:' scripts/makefile.mingw > makefile make prefix=/mingw make install prefix=/mingw popd また、zlibと同様に.DLLではなくstaticライブラリへのリンクを常用にするため以下のようにエスケープする。 pushd /mingw/lib/ mv -f libpng.dll.a libpng.dll.a.esc mv -f libpng12.dll.a libpng12.dll.a.esc popd なお、libpngはzlibに依存しており、zlibより先にビルドを行うことはできないので注意。PNG形式は隣接ピクセルとの差分を取った上でDeflateをかけ、圧縮効率を高められるようになっている。