novaの日記: bcb6 覚書
bcb6 で PNG ファイルを使う
PNG ファイルを扱うために libpng を bcb6 にインストールします。
source を get
必要なモノは二つ、libpng のソースと zlib のソースです。
まず、最新 (と思われる) ソースを PNG Source Code から get します。
で、適当なアーカイバで解凍します。
zlib を インストール
libpng をコンパイルする為には zlib が必要なので、まず zlib をインストールします。
既に bcb6 がインストールされているのでコンパイラは Borland の bcc32 を使います。
解凍したディレクトリ (zlib122) の中に win32 って名前のディレクトリがあります。
この中には有名コンパイラ用の Makefile が用意されています。
今回は bcc32 を使うので Makefile.bor を上位ディレクトリ (zlib122) にコピー。
で、コマンドプロンプトで make します。zlib122 に移動して、
make -f Makefile.bor
コレでコンパイル終わり。カレントディレクトリに zlib.lib が出来ます。 で、このライブラリとヘッダファイルを bcb6 の include, lib ディレクトリにコピーする。
- zconf.h, zconf.in.h, zlib.h, zutil.h を bcb6 の include ディレクトリ (path を弄ってなければ C:\Program Files\Borland\CBuilder6\Include) にコピー。
- zlib.lib を bcb6 の lib ディレクトリ (path を弄ってなければ C:\Program Files\Borland\CBuilder6\Lib) にコピー。
コレで完了。
libpng を インストール
libpng をコンパイルするにはさっき作った zlib.lib が必要です。
Makefile で zlib.lib の path を指定する必要がある (default は ../zlib) ので弄らなくても済むように zlib.lib を一階層上位にコピーして置きます。
こんな位置関係。
+[zlib122]
+[lpng128]
+zlib.lib
解凍したディレクトリ (lpng128) の中に scripts って名前のディレクトリがあります。
この中には有名コンパイラ用の Makefile が用意されています。
今回は bcc32 を使うので Makefile.bor を上位ディレクトリ (lpng128) にコピー。
今度はそのまま make は出来ません。私の場合は以下のように Makefile 弄ったらコンパイル通りました。
## Compiler, linker and lib stuff
CC=bcc
LD=bcc
LIB=tlib
を
## Compiler, linker and lib stuff
CC=bcc32
LD=bcc32
LIB=tlib
に書き換え
!ifndef TARGET_CPU
TARGET_CPU=2
!endif
を
!ifndef TARGET_CPU
TARGET_CPU=3
!endif
に書き換え
# -Z global optimization
CFLAGS=-O2 -Z -X- -w -I$(ZLIB_DIR) -$(TARGET_CPU) $(MODEL_ARG) $(CDEBUG)
を
# -Z global optimization
CFLAGS=-O2 -X- -w -I$(ZLIB_DIR) -$(TARGET_CPU) $(CDEBUG)
に書き換え
# -M generate map file
LDFLAGS=-M -L$(ZLIB_DIR) $(MODEL_ARG) $(LDEBUG)
を
# -M generate map file
LDFLAGS=-M -L$(ZLIB_DIR) $(LDEBUG)
に書き換え
pngtest$(MODEL).exe: pngtest$(MODEL).obj
$(LD) $(LDFLAGS) pngtest$(MODEL).obj $(LIBNAME) zlib_$(MODEL).lib $(NOEHLIB)
を
pngtest$(MODEL).exe: pngtest$(MODEL).obj
$(LD) $(LDFLAGS) pngtest$(MODEL).obj $(LIBNAME) zlib.lib $(NOEHLIB)
に書き換え
で修正完了。コマンドプロンプトで make します。lpng128 に移動して、
make -f Makefile.bor
コレでコンパイル終わり。カレントディレクトリに libpngl.lib が出来ます。 で、このライブラリとヘッダファイルを bcb6 の include, lib ディレクトリにコピーする。
- png.h, pngconf.h を bcb6 の include ディレクトリ (path を弄ってなければ C:\Program Files\Borland\CBuilder6\Include) にコピー。
- libpngl.lib を bcb6 の lib ディレクトリ (path を弄ってなければ C:\Program Files\Borland\CBuilder6\Lib) にコピー。
コレで完了。
bcb に組み込む
コレで bcb6 で PNG ファイルが使えるようになりました。使う場合はプロジェクト毎に以下の作業が必要です。
- ヘッダファイルに #include "png.h" を記述。
- プロジェクトに zlib.lib を追加。
- プロジェクトに libpngl.lib を追加。
で、PNG利用術 あたりのサンプルコードをパチって来て ビルドすると……エラーが出ました。
[C++ エラー] zconf.h(264): E2015 'Byte' と 'System::Byte' の区別が曖昧
で、264 行目のコードは
typedef Byte FAR Bytef;
要するに「Byte」ってのが複数あってドレを使いたいのかワカラン、ってコトだよな? System の方は如何にもならん (如何にかしない方がイイ) から、System じゃ無い方の Byte を如何にかしよう。 直ぐ上 (255 行目) にこんな記述がある。
typedef unsigned char Byte; /* 8 bits */
System じゃ無い方の Byte の実体は unsigned char ってコト?じゃあ Byte じゃ無くて実体の方を指定すればこのエラーは消えるな。 そんなワケで zconf.h の 264 行目を
typedef unsigned char Bytef;
に書き換えたら通りました。ちゃんと PNG が使えてます。
bcb6 覚書 More ログイン