libpng-1.2.49、libpng-1.5.10をMinGWでビルドする

id:eel3:20120615:1339768796 にてMinGWでzlibをビルドした理由はlibpngを使う為だ。

zlibと同様にlibpngのバイナリもLibPng for Windowsで入手できるものの、こちらも微妙に古い。しかもセキュリティホールが残っているバージョンだ。そこでlibpngも最新版をMinGW*1でビルドすることにした。

当初はlibpng-1.5.10を使う予定だったものの、諸事情によりlibpng-1.2.49に変更した。どちらも一通りビルドしたので記録を残しておく。

なおソースコードは双方ともhttp://www.libpng.org/pub/png/libpng.htmlから入手した。

libpng-1.2.49

libpng-1.2.49.tar.xzを取得。伸張・展開するとlibpng-1.2.49というディレクトリができるので、コマンドプロンプトでその中に入る。

libpngをビルドするにはconfigureを使う方法とscripts以下のMakefileを叩く方法がある。今回はMakefileを使う。MinGWでビルドする為にscripts/makefile.mingwが用意されている。

make -f scripts\makefile.mingw ZLIBINC=..\..\zlib\inc ZLIBLIB=..\..\zlib\lib

先ほどビルドしたzlibのヘッダとライブラリの位置をZLIBINCとZLIBLIBで指定している。システムのヘッダ、ライブラリのディレクトリにインストール済みの場合は指定する必要はない。

zlibと同様にlibpngも汎用に使う訳ではないので、make installせずに手動で必要なファイルをコピーする。対象となるファイルは以下の通り:

  • libpng.a
  • libpng.def
  • libpng.dll.a
  • libpng.pc
  • libpng12.dll
  • libpng-config
  • png.h
  • pngconf.h

若干必要か不要か怪しいファイルがある……。静的リンクする場合はlibpng.a、DLLを使う場合はlibpng.dll.aを使う。

libpng-1.5.10

libpng-1.5.10.tar.xzを取得。伸張・展開するとlibpng-1.5.10というディレクトリができるので、コマンドプロンプトでその中に入る。

1.5.10のビルドにもconfigureを使う方法とscripts以下のMakefileを叩く方法がある。今回もMakefileを使うものの、1.5.10にはMinGWでビルドする為のMakefileが用意されていない*2。そこでGCC用のMakefileで代用する。

make -f scripts\makefile.gcc ZLIBINC=..\..\zlib\inc ZLIBLIB=..\..\zlib\lib

ZLIBINC、ZLIBLIBについては1.2.49と同じ。

注意点として、GCC用のMakefileで代用した為かDLLはビルドできない。試してはいないけどVisual Studioのプロジェクトも用意されているので、そちらを使えばDLLを作れそうだ。

1.2.49と同様にmake installせずに手動で必要なファイルをコピーする。対象ファイルは以下の通り:

  • libpng.a
  • png.h
  • pngconf.h
  • pnglibconf.h

必要なヘッダファイルが1つ増えている点に注意。pnglibconf.hはビルド時に生成されるようだ。

*1:正確にはTDM-GCC 4.5.1。

*2:どうもMinGW用のMakefileは1.5.0で削除されたようだ。