パスワードを忘れた? アカウント作成
574754 journal

novaの日記: bcb6 覚書

日記 by nova

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 が使えてます。

この議論は賞味期限が切れたので、アーカイブ化されています。 新たにコメントを付けることはできません。
typodupeerror

目玉の数さえ十分あれば、どんなバグも深刻ではない -- Eric Raymond

読み込み中...