今更MinGW 2009.06(6) zlib,libjpeg,libpng
非常に良く使用されるライブラリのzlib, libjpeg, libpngをビルド・インストールする。
zlib, libjpeg, libpngは全てmingwPORT(詳細は今更MinGW2008年春版の今更MinGW(2)を参照)という仕組みが用意されており、簡単にMinGW環境に組み込めるようになっている。しかし、猫研パックでは質問項目を省略するためzlibのパッチのみを使用し、通常の手順でビルドする。また、libjepgのmingwPORTはIJGのオリジナル(後述)向けのもので、libpngはバージョンが1.2.8と古いこともmingwPORTを使用しない理由である。
なお、ここではlibjpegにx86のSIMDを利用して高速化されているバージョンを使用する。当該サイトの説明を読めばわかるが、基本的にオリジナルのlibjpegと同様に扱え、かつ一部のケースでは精度が向上するなど、機能的にも改良されている。オリジナルのlibjpegはIndependent JPEG Groupだ。
ソースの入手
以下のソースアーカイブを入手し、/src以下に展開しよう。
- zlib Home Site
- User Contributed: mingwPORT / Current Releases
- Independent JPEG Group's JPEG software release 6b with x86 SIMD extension for IJG JPEG library version 1.02
- libpng Home Page
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を変更する必要がある。
具体的には、まずnasmwを用意していない場合、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をかけ、圧縮効率を高められるようになっている。
最終更新時間:2009年06月25日 17時49分01秒