- 追加された行はこのように表示されます。
- 削除された行は
このように表示されます。
!!!今更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を使用しない理由である。
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がサポートされないケースはほとんど無いので、
:::これも高頻度に利用される。
:::なお、オリジナルのlibjpegは[Independent JPEG Group|http://www.ijg.org/]であるが、ここではx86の''SIMDを利用して高速化されているバージョン''を使用する。
:::当該サイトの説明を読めばわかるが、基本的にオリジナルのlibjpegと同様に扱え、
:::かつ一部のケースでは精度が向上するなど、''機能的にも改良されている''。
::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をかけ、圧縮効率を高められるようになっている。