WinBGImのコンパイル

プログラミング演習でこれまでは,VisualStudio(以下VS)を使用してきました。しかしVSは非常に大きなアプリケーションです。そこで,フリーのコンパイラであるMingwを使用することにしました。私のプログラミングの授業では,グラフィックスプログラミングを行います。これまでは,VS+自作ヘッダファイルで対応していたのですが,どうやらMingwでは使用できないことがわかりました。そこでMingwで使用できるグラフィックス環境を検索したところ,WinBGImというグラフィックスライブラリを見つけました。このライブラリMS-DOSの時代にTURBO-CというC言語の開発環境がありましたが,そこで使用されていたBorland Graphics InterfaceをWindowsで利用できるものです。大変古いプログラムで,まずコンパイル済みのライブラリをダウンロードしてみましたが,ファイルが古すぎて使用できませんでした。そこでソースコードをコンパイルしてライブラリを再構成することにしました。ところが,これがうまくコンパイルできないので大変困りましたが,なんとかライブラリを生成できたの備忘録として残しておきたいと思います。
まず,WinBGImのサイトからソースコードをダウンロードして展開します。
変更が必要なファイルは次の5つです。
●makefile
●drawing.cxx
●winthread.cxx
●graphics.h and winbgim.h

 

【makefile】
ソースコードが古く,現在のコンパイラでは対応できないようです。そこで,新しいコンパイラでコンパイルする際にコンパイルエラーが出ないようにコンパイルオプションを追加します。

CPPFLAGS = -c -O3 -fno-rtti -fno-exceptions
CPPFLAGS = -c -O3 -fno-rtti -fno-exceptions -Wno-error=narrowing

【drawing.cxx】

66行目
return (WindowData*)GetWindowLong( hWnd, GWL_USERDATA );
return (WindowData*)GetWindowLong( hWnd, GWLP_USERDATA );

【winthread.cxx】
SetWindowLong( hWindow, GWL_USERDATA, (LONG)pWndData );
SetWindowLong( hWindow, GWLP_USERDATA, (LONG_PTR)pWndData );

【graphics.hとwinbgim.h】
この二つのファイルは,ファイル名が違うだけで中身は同じファイルのようだ。

302行目
int left=0, int right=0, int right=INT_MAX, int bottom=INT_MAX,
int left=0, int top=0, int right=INT_MAX, int bottom=INT_MAX,

makefile以外は,単純なタイプミスのような気がする。なんで,長年これを放置しているのだろうか?
さて,これだけ修正しても,コンパイラの仕様でワーニングが多数出されえるが,とりあえずライブラリのlibbgi.aを得ることができる。このライブラリファイルとgraphics.hをMingwの然るべきフォルダにコピーする。
コンパイルするときには,次のコンパイルオプションが必要である。

-lbgi -lgdi32 -lcomdlg32 -luuid -loleaut32 -lole32

例えば,sample.cppをコンパイルする際には

g++ sample.cpp -o sample.exe -lbgi -lgdi32 -lcomdlg32 -luuid -loleaut32 -lole32

と入力する必要がある。
まだ,いくつかのサンプルをコンパイルできることを確かめただけである。BGIはMS-DOS時代に使っていたこともあり懐かしい感じがする。