nul.jp > PureDataLab

Pure Data の external を Borland C++ 5.5 で コンパイルする

Pd (Pure Data) の Windows 版の開発にはマイクロソフトの Visual C++ が使用されており、 external の開発もそれが前提となっています。 しかし Visual C++ を購入せずボーランドから無料で配布されている Borland C++ 5.5 を使用した方がより少ない負担で extern の開発をすることができるでしょう。 このページでは Pd に付属のサンプルプログラム(\pd\doc\6.externs にある foo1、foo2、dspobj~ の三つのプログラム)を BC++ 5.5 を使ってコンパイルする手順を説明します。 DOS コマンドに関する基本的な知識があればこの手順を追うことは可能です。

implib.exe で pd.dll のインポートライブラリを作成

Pd についてくる pd.lib はマイクロソフトのコンパイラ向けの形式なのでボーランドのコンパイラでは使えません。 その代わりに implib.exe を使ってボーランド用のインポートライブラリを作成します。 コマンドラインプロンプトで \pd\bin に移動し、 implib -a pd_bc.lib pd.dll と入力します。

C:\pd\bin>implib -a pd_bc.lib pd.dll

これでボーランド用のインポートライブラリ pd_bc.lib が作成されます。 このライブラリは external のリンク時に一緒にリンクします。

モジュール定義ファイルを作る

次のような内容の三つのファイルを作成し、 それぞれ foo1.def, foo2.def, dspobj~.def という名前で \pd\doc\6.externs に置きます。

# foo1.def

EXPORTS
        foo1_setup =_foo1_setup
# foo2.def

EXPORTS
        foo2_setup =_foo2_setup
# dspobj~.def

EXPORTS
        dspobj_tilde_setup =_dspobj_tilde_setup

メイクする

\pd\doc\6.externs にある makefile もやはりボーランドのコンパイラでは使えないものなので独自に書いたものを使います。 以下のような内容で makefile.bc という名前のファイルを作ってください

# makefile.bc

ROOT = c:\borland\bcc55
CC   = $(ROOT)\bin\bcc32
LINK = $(ROOT)\bin\ilink32
PD   = c:\pd

INC = -I$(ROOT)\include;$(PD)\src
LIB = -L$(ROOT)\lib;$(PD)\bin

CFLAGS = -c -tWD
LFLAGS = -Tpd -c -x

all: foo1.dll foo2.dll dspobj~.dll

.c.dll:
    $(CC) $(CFLAGS) $(INC) -o$*.obj $*.c
    $(LINK) $(LFLAGS) $(LIB)\
        c0d32.obj+$*.obj,$*.dll,,import32.lib+cw32.lib+pd_bc.lib,$*.def

clean:
    del *.dll
    del *.obj
    del *.ils
    del *.ilf
    del *.ilc
    del *.ild
    del *.tds

このメイクファイルを \pd\doc\6.externs にコピーしてから、 コマンドラインプロンプトで \pd\doc\6.externs に移動し、 make -fmakefile.bc と入力します。

C:\pd\doc\6.externs>make -fmakefile.bc

これで foo1.dll foo2.dll dspobj~.dll が作成されます。 ちなみに「パラメータ 'x' は一度も使用されない」という警告は特に気にする必要はありません。 正しく作成されたかを確認するために Pd で test-foo1.pd を開いてみてください。 次のようなウィンドウが表示されるはずです。

オブジェクト [foo1] の入力にメッセージ [5] と メッセージ [rats] が繋がっている

オブジェクト foo1 が上の二つのメッセージと線で繋がれていなければ foo1.dll が正常に作成されていません。 もう一度よく確認してやり直してください。 オブジェクト foo1 は数値メッセージを受け取ったときにその数値を、"rats" というメッセージを受け取ったときに "rats" という文字列を Pd のコンソールに出力する簡単なオブジェクトです。

http://nul.jp/2002/pd_bc
文書作成: 2001-08