<Home> → <weekly making now!> → <weekly making now! (00.05.31)>
00/10 現在、[Borland C++ Compiler 5.5 Techniques] の方で Borland C++ Compiler について纏めています。最新情報は上記の page でどうぞ。
ちなみにこの page は BCC 5.5 について記載しています。BCC 5.5.1 以降では問題が解消されている物も多々あります。特にこの page で愚痴愚痴言っている Help の欠落、一般保護エラーが発生してしまう件等について解消されています。一般保護エラーの件は検証していませんが。
また、Download 出来なくなってしまったファイルも [Download Room] で補完しているかもしれません。合わせてチェックしてみてください。
最近の OpenSource 風潮が気になったのか、お金の香りを感じたのか、最近 Inprise(旧Borland) 社が様々なツールを Freeで公開するようになりました。この「Borland C++ Compiler 5.5(以下 BCC と表記します)」もその一つです。
今までの方式だと「お試し版」とか「体験版」という名目でたいした機能が使えなかったのですが、今回の「Borland C++ Compiler 5.5」では少なくともそのような制限は記載されていませんでした。とはいえ、何の制限も無いかというと決してそうではなく、例えば「デバッグツールがない」とか「最適化が働いていない」とかはありますが、まあこれはきっと「Borland C++ Builder(以下 BCB と表記します)、買ってね〜」という布石なのでしょう。
今回、make するために [win32b55.mak] を作りました。Borland C++ 5.0J の Help と [Borland C++ Compiler 5.5をインストールして「ちょっと」使ってみる] にあるOption switch 集を参考に作成しました。特に iLink32.exe の Option switch には自信がないのですが、間違っていたら教えてください。Tlink.exe と変わってなければいいなぁ。
まずは console で [win32b55.mak] の使い方を学んでください。
[console.lzh(すまぬ、どっかいってしまった)] を解凍して同じディレクトリーに以下の3つのファイルを置いてください。
BCC に PATH が通っていれば、makefile と同じディレクトリーで MAKE を実行させただけで HELLO.EXE が出来上がるはずです。
ミソは makefile の先頭の一行、TARGET=CONSOLE です。TARGET を指定することで make の種類を選択できます。この設定は必ず win32b55.mak より上で設定します。なぜなら win32b55.mak でこの TARGET を判断して適切な flug を選択しているからです。TARGET を指定しない場合、デフォルトは CONSOLE にしています。
win32b55.mak を見て貰えれば分かると思うのですが、結構色々設定できるように仕掛けました。でもほとんどの場合、デフォルトで問題ないようにしてあります(あるつもりです)。BEGIN - END 間に設定できる flug を纏めてあります。暇があったら眺めてみてください。
### <--- BEGIN BEGIN BEGIN ---> ##
## TARGET = CONSOLE # *CONSOLE, WIN32GUI, WIN32DLL, ... and more
## MT = 0 # *0(single thread), 1(multi thread)
## ALIGN = 4 # 1(BYTE), 2(WORD), 4(DWORD), *8(QWORD).
## CPUOPT = 3 # *3(i386), 4(i486), 5(Pentium), 6(PentiumPro)
## DEBUG = 0 # *0(release), 1(debug)
## # (note) BCB is not make debug symbol ;-(... You don't have debug.
## OPTIMIZE = 1 # 0(No optimize), *1(size), 2(speed), 3(size&speed, and more). debug mode is 0.
## PRECOMPILE = 1 # *0(No use), 1(Use pre-compiled header)
## NOPATCHS = 0 # 1 is no need patchs. default is 0 (under patch included)
## WINVER = 0x400 # (patch) Why? BCC5.5 is default 0x500. You need only W2K program?
## IE_VER = 0x300 # (patch) Why? BCC5.5 is default 0x501. I think no need IE function.
## WINNT_VER = 0x400 # (patch)
## BCBMAKEPATH = C:\Borland\Bcc55\bin
## If you cannot use default BCB make.exe, you must set Borland bin path.
## ENABLEDIRECTX = 0 # 1 is include directx setting. default is 0
## DIRECTXPATH = C:\mssdk
## If you cannot use default BCB include and lib, you must set directx path.
## (note) If you installed Platform SDK too, maybe you have meny error... I don't know ;-(.
### <--- END END END ---> ###
MAKE CLEAN でイヤーンなファイルどもが消えます (^^)。
サンプルプログラムを作成するのが面倒くさいので [【連載】nakkaのオンラインソフトレシピ 第1回 ソフト制作は仕様が大切(窓の杜)] の recipe1_simple.lzh を利用させてもらいます (^^)。
早速、 recipe1_simple.lzh を解凍して source のあるディレクトリーに [win32.lzh] を解凍します。
SIMPLE.C のあるディレクトリーに afxres.h、makefile、win32b55.mak があれば問題ないです。ちなみに afxres.h は空っぽです。何かないと文句を言ってくるので適当なもの突っ込んだだけです。役割としては MFC とか ATL とかに関係するらしいファイルなのですが関係ないし、無くても一向に問題なし。maybe。
これも MAKE 一発。
変な警告が出てくると思うけど、この場合は問題なし。Build オプションで警告を消す(見せなくする)ことも出来るのですが、この手の警告を無視すると後で痛い目にあうのでこのままにしています。makefile を見ると変更点は TARGET と PROJ 位しかないでしょ?
世の中うまく出来ているんです。
参考になりそうなサンプルが無かったので自分で作成しました。つまらない物ですが (^^;。いつもだと dll は LoadLibrary() して GetProcAddress() しているのですが、それでは implib のテストにならないので敢えて使用していません。今回は binary も付属しています。
肝は dll.mak の TARGET=WIN32DLL と implib の使い方です。dll を作成するには TARGET=WIN32DLL を指定します。Visual C++ では何も言わずとも作成された import library が BCC では作成されないので、implib.exe で出来上がった sample.dll から sample.lib を作成します。
次に sample.exe で sample.lib を link するのを忘れなければ No 問題。
BCC のリリースノートを見ると「Visual C++ の #pragma サポート」があったので、調査するためワザと使ってみました。dll.h
の _declspec(dllexport) や #pragma pack(1) がこれに当たりますが、見事サポートしています。よかよか。
[C++Builder Q&A borland C++Builder での DLL の構築方法(INPRISE Japan Q&A C++Builder)]
一応、make 出来ますが色々問題を背負っています。
サンプルプログラムを作成するのが面倒くさいので(またかい)、DirectX SDK に付属されているサンプルプログラム DDex1 を使用します。ということでサンプルプログラムも一緒にインストールしておいてね。DDex1 は、DirectX7 では通常「$(DIRECTXPATH)\Samples\Multimedia\DDraw\Src\DDex1」にあるはずです。
例の如く、DDex1 に [ddex1.lzh] を解凍するのですが、makefile と ddex1.def ファイルが上書きになってしまいますので上書きをする前にバックアップを取ることをお勧めします。def ファイルを上書きした理由は、BCC では「SECTIONS」をしっかり設定しないと make できないらしくのですが、面倒くさかったので削除しました。
後は、ENABLEDIRECTX と DIRECTXPATH さえ注意すれば簡単に make 出来るようになります。
オマケのワンポイントアドバイス。
[Borland C++ Compiler 5.5 Information(Inprise Japan)] にある Borland C++ Compiler 5.5 Supplement Pack をインストールすることで OpenGL の Header がインストールされます。そう、Header だけなんです ;-(。
どうやら BCC には、インポートライブラリで提供されている opengl32.dll(gl.h)、glu32.dll(glu.h) のライブラリはあるのですが、スタティックライブラリである glaux.lib(glaux.h) は用意されていないようです。話によると BCB の比較的新しいバージョンには付属しているらしいのですが、無いものは無い。Visual C++ や Platform SDK にはあるんだけどねぇ :-P。
なぜ、GLAUX にこだわっているかと言うと、実質バイブルとして扱われている「OpenGL Programming Guide(通称、赤本。日本語版は星雲社。ISDN 4-7952-9645-6)」のサンプルプログラムは GLAUX を前提に記載されているので、OpenGL を始めるにあたっては GLAUX でやりたいわけです(余談)。
そこで glaux.lib の代替品、glauximp.dll を使用して解決します。以下の page から AuxOpenGLLib.zip を download します。
赤本のサンプルプログラムの source も以下から download 出来ます。SGI の Copyright を残しておけば改変自由ようなので、今回はこれをありがたく使わしてもらいます。以下の ftp site の opengl.tar.Z というファイルがそれにあたります。
それでは Let's making。[simlpeGL.lzh]を解凍し、同じディレクトリーに AuxOpenGLLib.zip を解凍してください。make 一発で完成です (^^)。
(00.06.17 : 追記)
Platform SDK に GLAUX の static library の source らしきものを発見しました。殆ど opengl.tar.Z にある source でした。ただ MS の source もほんの少し入っていたので make するのを躊躇い確かめていません。多分大丈夫とは思いますが。
感じた不満を書いてみました。
「Free なんだから、、、」と言ってしまえばそれまでだとは思うのですが、少なくとも製品版と同じクオリティのものなのでもう少し「まとも」なものに出来なかったのか疑問に思います。
BCC 関連リンクから。
直接関係がないコネタ。
以後追記。