トップ 検索 一覧 差分 ソース ヘルプ RSS ログイン

今更MinGW 2009.06(6) zlib,libjpeg,libpng

今更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以下に展開しよう。

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秒