mieki256's diary



2023/12/30() [n年前の日記]

#2 [prog] MinGW上でzlibやlibpngをビルドしてみた

Windows10 x64 22H2 + MnGW (gcc 6.3.0) 上で、zlib と libpng をビルドしてみた。

OpenGL には画像ファイルを読み込む機能が無い。だから、png画像ファイルをテクスチャとして利用したい際は、何かしらの画像読み込みライブラリを持ってきてどうにかすることになる。そこで libpng を使って読み込む事例が多いように見えたので、そのあたりを使えるようにしておこうかなと…。

以下のページを参考にして作業させてもらった。ありがたや。

_zlib-1.2.7をMinGWでビルドする - 新・日々録 by TRASH BOX@Eel
_libpng-1.2.49、libpng-1.5.10をMinGWでビルドする - 新・日々録 by TRASH BOX@Eel

zlib のソースと libpng のソースを、以下から入手。

_zlib Home Site
_Index of /fossils
_libpng Home Page
_LIBPNG: PNG reference library - Browse Files at SourceForge.net

今回は、以下の2つのファイルを入手した。それぞれ解凍。
zlib13.zip
libpng-1.6.40.tar.xz

zlibをビルド :

libpng は zlib を使って処理をするので、まず最初に zlib をビルドする必要がある。

解凍したフォルダ内をカレントディレクトリにして、make を実行。MinGW用の Makefile は無いけれど、gcc 用のソレが利用できるらしい。
make -f win32/Makefile.gcc

以下のファイルができるので、MinGW をインストールしたフォルダにコピーする。
zlib1.dll
zconf.h
zlib.h
libz.a
libz.dll.a

それぞれを以下のディレクトリにコピーすればいい。たぶん。
  • .dll は bin/ に。
  • .h は include/ に。
  • .a は lib/ に。

libz.dll.a があるとそちらを優先して使われて動的リンクになるという話を見かけたので、libz.dll.a を libz.dll.a.esc にリネームしておいた。

libpngをビルド :

これも解凍したフォルダの中で make を走らせる。
make -f scripts/makefile.gcc

以下のファイルができるので、MinGW のフォルダにコピー。.h は include/ に。.a は lib/ に。
png.h
pngconf.h
pngdebug.h
pnginfo.h
pnglibconf.h
pngpriv.h
pngstruct.h
libpng.a

ちなみに、gcc で libpng を使ったプログラムをビルドしたい時は、オプションとして -lpng -lz をつけてリンカに指示してやるらしい。-lxxxx と指定すると、自動で頭に lib をつけて、libxxxx をリンクしてくれるそうで。つまり、-lpng -lz は、libpng、libz をリンクせよという指示になる。

zlib自体はパッケージがある :

MinGW の場合、libpng は無いけれど、zlib 自体はパッケージが存在しているっぽい。libz、もしくは zlib という名前で、dev がついているのがソレ。
libz-1.2.11-1-mingw32-dev.tar.xz
zlib-1.2.8-1-mingw32-dev.tar.lzma

ただ、バージョンが古い。一応セキュリティホール云々の話もありそうなので、MinGWインストールフォルダ内の、公式パッケージ版の各ファイルをリネームして、今回ビルドしたファイルをコピーして使うことにした。

libpngを使ったプログラムをビルドできるかテスト :

以下で紹介されているプログラムをコピペさせてもらって、MinGW (gcc 6.3.0)上で libpng を使ったプログラムをビルドできるのか試してみた。

_【C言語】libpngのインストールと使用方法・使用例 | だえうホームページ

_main.c
_input.png

Makefile は以下のような感じ。

_Makefile
png.exe: main.c
    gcc main.c -o png.exe -static -lpng -lz

.PHONY: clean
clean:
    rm -f png.exe
  • main.c から png.exe を作ってる。
  • -lpng -lz を指定して、libpng と libz をリンクせよと指定している。
  • -static をつけて、静的リンク(static link)をしている。
ちなみに Makefile は、行頭のスペースがTAB文字じゃないと動作しないので注意。

make と打ってビルド。png.exe が生成された。

png.exe input.png と打ち込んだら、グレー画像になった _output.png が得られた。今回ビルドした libpng は、それらしく動作してるっぽい。

余談。MSYS2でlibpngをインストール :

MSYS2なら、zlib も libpng もパッケージとして用意されているので、pacman でインストールできる。
pacman -S mingw-w64-x86_64-zlib
pacman -S mingw-w64-i686-zlib

pacman -S mingw-w64-x86_64-libpng
pacman -S mingw-w64-i686-libpng

2023/12/30時点では以下がインストールされた。
mingw64/mingw-w64-x86_64-zlib 1.3-1
mingw32/mingw-w64-i686-zlib 1.3-1 

mingw64/mingw-w64-x86_64-libpng 1.6.40-1
mingw32/mingw-w64-i686-libpng 1.6.40-1

以上です。

過去ログ表示

Prev - 2023/12 - Next
1 2
3 4 5 6 7 8 9
10 11 12 13 14 15 16
17 18 19 20 21 22 23
24 25 26 27 28 29 30
31

カテゴリで表示

検索機能は Namazu for hns で提供されています。(詳細指定/ヘルプ


注意: 現在使用の日記自動生成システムは Version 2.19.6 です。
公開されている日記自動生成システムは Version 2.19.5 です。

Powered by hns-2.19.6, HyperNikkiSystem Project