libpng1.0.1のVC++でのメイク方法


※ちなみに、最近知ったんですが、lpng125 & zlib114ではlpng125/projects/msvc/にVC++5(以降?)用のプロジェクトワークスペースファイル(libpng.dsw)があって全部やってくれます。
アクティブな構成で、libpng-Win32LIB, zlib-Win32LIBを指定します。何故か私の場合、DLLを使うと上手く動作しませんでした(実行時エラー)。


PNGを扱うライブラリlibpngとzlibはソース提供で、使う側が自分でコンパイルする必要があります。
ソースには一応MS C用のメイクファイルが添付されてるんですが、案の定例によってやっぱりそのまま
nmake -f makefile.msc
とやっても失敗します(どーも私の場合、Unix発のソースはビルドを成功させるまでが一苦労…)。私も悩んでいたら、
libpng を Visual C++ 5.0 でコンパイルする(byさきさん)
という、まさにそのまんまなページを発見しました。

気をつけなければいけないのは、先のページにも書いてありますが、ここのメイクファイルを使って作ったライブラリを使う本体は、マルチスレッド版のスタティックなランタイムをリンクする必要がある、という点です。

"マルチスレッド(DLL)"(=/MD)とは違いますので要注意です。
間違うとリンク時に、
LINK : warning LNK4098: defaultlib "MSVCRT" は他のライブラリの使用と競合しています; /NODEFAULTLIB:library を使用してください
と怒られます。まぁ、無視してそのまま使っても動いてしまったりする場合が多々ありますが、不可解な謎のトラブルの原因となる恐れがあるので止めとくのが無難です。

私はこの"マルチスレッド(DLL)"の方を使いたかったので、ちょっと改造してみました。
これです。
殆どさきさんの作られたメイクファイルのまんまですが…。今回この簡単な改造に取り組んだ事で色々学べたのでまぁよし。
C:\Program Files\DevStudio\VC\include\Win32.mak
にはメイクに関する色々な変数が設定されているんですね。

ちなみに使い方は、libpng を Visual C++ 5.0 でコンパイルすると同じです。lpng, zlibそれぞれのディレクトリにmakefileをコピーしてコマンドラインから
>nmake
です。
そうそう、事前にVCをコマンドラインから使用可能にしておく必要があります。
あと、先のページのzlib用メイクファイル実行に先だって、.\zlib\nt\zlib.dntを.\zlib\にコピーしておく必要もあります。

ちなみに、デバッグ用にメイクすると、デフォルトの設定("マルチスレッド(DLL)デバッグ")のままではデバッグ用のランタイムライブラリがリンクされるので、それはそれで対策(上記のランタイムライブラリの指定をキチンと行う)が必要です。


フリーソフトウェアへ戻る
ホームページへ戻る
お手紙はnekora@mapletown.netまで☆