BCC32Cを使ってみた

Borland  C++ コンパイラ、エンバカデロ C++ コンパイラ

ホーム 前へ 次へ
Borland C++ Compiler 5.5 について

インプライズ株式会社が販売していた、統合開発環境「C++ Builder」のコマンドライン・コンパイラと種々のツール、ライブラリ類を合わせて、2000年3月に、「Borland C++ Compiler 5.5」として、フリーで公開されました。インプライズ社のサイトからダウンロードでき、雑誌付録のCDに添付されて配布されました。

統合開発環境や、Windowsアプリケーション開発用のクラスライブラリ(マイクロソフトのMFCやボーランドのC++ BuilderのVCL)は含まれていませんでしたが、Windows開発までが可能なセットになっていて、魅力的な開発ツールでした。

デバッガも別で公開されていて、併せて利用することができました。(私は、そこまで使いこなしてなかったので利用していません)

BCC5.5用の統合開発環境やリソースエディタ(Windows用の画面開発ツール)、Eclipseの設定方法などを熱心なユーザーの方が公開してくれていました。そのいくつかについて、BCC32C、BCC32Xで利用検証を行なっていきます。

エンバカデロ C++ コンパイラについて

2016年7月に「Embarcadero C++ 10.1 ‘Berlin’ Compiler」が、2018年5月には「Embarcadero C++ 10.2 ‘Tokyo’ Compiler」として公開されたフリーのC/C++コンパイラです。BCC32CもBCC32XもClangベースのC++コンパイラであり、BCC5.5自体の後継ではありませんが、BCC32CはBCC5.5と同じオプションが使える(使えないものも一部ある)の大きく変更しなくても使用できます。

インプライズ社(その後Borland社)は、現在はエンバカデロ・テクノロジーズ社になっていますが、統合開発環境として「C++Builder」は、バージョンアップを続けて販売されています。Pascalベースの開発ツールとして、よく利用されていた「Delphi」も併せて更新・販売されています。

C/C++コンパイラの内容については、エンバカデロ・テクノロジーズ社のサイトからダウンロードしたファイル(BCC102.zip)に含まれている「Installing and Using the Embarcadero C++ 10.2 Tokyo Command-line Compiler.txt」(英文)を以下に和訳・抜粋しました。

−Embarcadero 10.2 Tokyo C ++コンパイラは、32ビットWindows用のFreeのClangベースコンパイラです。 ダウンロード・ファイルには、Dinkumware STLと、コマンドラインとWindows のGUIアプリケーションの両方を構築するために必要なヘッダ・ファイルとインポート・ライブラリが含まれています。

−ダウンロード・ファイルには、2つのコンパイラが含まれる、BCC32CとBCC32Xです。二つのコンパイラは、コマンドラインでの扱い(handling)を除いて同じものです。BCC32Cは、伝統的なBCC32コマンドライン・コンパイラをサポートします。もし、以前からの伝統的なコンパイラに慣れ親しんでいるのであればこちらを使ってほしい。BCC32Xは、Clangコマンドラインをサポートします。もし、Clangに慣れている場合や、より一般的なコマンドライン・インターフェースを使いたい場合は、こちらを選んでほしい。

−「C ++ 10.2 Tokyoコンパイラ」は、ユーザーがコマンドプロンプト画面で作業することを前提としています。ノートパッドやサブライムテキストなどでプログラムを作成します。(エディタは付属していません)

−Embarcaderoは、ツール、ライブラリ、C ++、C ++ Builder(このコンパイラが一部となっているより大きな製品)のオンライン・ヘルプを「docwiki」で提供しています。 以下のURLで照会できます。
   http://docwiki.embarcadero.com/RADStudio/Tokyo/en/Main_Page

−このコンパイラは、Windows 32ビット版のみです。 Win32に加えてWindows 64ビット、iOS、Android、OSXのコンパイルやデバッグを行いたい場合(さらに多くのプラットフォームが追加されていく)、以下のURLを参照ください、C++ Builderの中にフルで活用できるコンパイラとIDE製品が含まれています。
  https://www.embarcadero.com/products/cbuilder


含まれているコマンドライン・ツールは、同じ文書に、以下のように説明されています。


1)bcc32c
コンパイラです。-hオプションを使用するとすべてのオプションが表示されます。
設定ファイル:コンパイラは、設定ファイル「bcc32c.cfg」を見ます。設定ファイルには、コマンドラインで渡されるオプションが含まれています。 ダウンロードした際に、デフォルト値の設定ファイルが含まれています。

2)bcc32x
これもコンパイラそのものです。Clangコマンドライン・オプションを使うこと以外は、BCC32Cとおなじものです。「--help」オプションで、すべてのオプションが表示できます。
設定(config)ファイル:コンパイラは、設定ファイル「bcc32x.cfg」を見ます。設定ファイルには、コマンドラインで渡されるオプションが含まれています。 ダウンロードした際に、デフォルト値の設定ファイルが含まれています。

3)cpp32c
C ++プリプロセッサです。 CまたはC ++ファイルがコンパイルされる前の実行された初期処理を確認できる。すなわち、#include拡張と#define処理です。

4)grep
一致する文字列をテキストファイル(ソースコードなど)から探すためのツールです。

5)ilink32
コンパイルされたobjectファイルをリンクして、実行型ファイル(exe)にする。通常はコンパイラから呼び出されます。

6)implib
これは、DLLまたはモジュール定義ファイルを入力として取り込み、インポート・ライブラリ(.lib)を作成します。

7)make
 ファイルの依存関係に従ってコマンドを実行するために使用されるツール。通常、多くのソースプログラム・ファイルからなるプロジェクトをコンパイルするために使用されます。

8)tdump
 デバッグ情報、エクスポートなど、.exe、.lib、またはobjファイルの構造に関する大量の情報を表示します。

9)tlib
複数のオブジェクト(.objファイル)から作成されたライブラリ(.libファイル)を管理する。オブジェクト・ファイル(.obj、複数)からライブラリの作成、オブジェクト・ファイルの追加、削除、置き換えができます。

10)touch
1つまたは複数のファイルのタイムスタンプを最終更新日時から現在に、または指定された日時に設定する。

BCC5.5との違い

これから、利用する方にとってBCC5.5からエンバカデロ C++ コンパイラで、何が変わったかは、さほど重要なことではないと思いますので、含まれるツール類(表1)の対比、設定ファイルの違い、プログラムの留意点など、気の付いた点を記載します。

BCC5.5のコードの再コンパイルや、makeファイルの書き換え、BCC5.5用に開発された様々なツール類をエンバカデロ C++ コンパイラでの利用する際に参考としてもらえれば、幸いです。

1)ツールの比較

<表1 ツール比較>
名称   エンバカデロ 10.2   BCC5.5   備考 
ファイル名  Version  ファイル名   Version
 コマンドライン・コンパイラ   bcc32c.exe
 bcc32c.cfg
7.30  bcc32.exe  5.5.1 ・エンバカデロC++、BCC32CはClangベース、伝統的なBCC32コマンドライン・コンパイラを継承
・エンバカデロC++には、設定ファイル(bcc32c.cfg)が標準添付、BCC5.5では、各自で作成(bcc32.cfg)
 bcc32x.exe
 bcc32x.cfg
 7.30 Clangコマンドライン・オプションを使うこと以外は、BCC32Cとおなじ
・設定ファイル(bcc32x.cfg)が標準添付
 リンカ  ilink32.exe  6.90  ilink32.exe  5.00 ・エンバカデロC++では、BCC32C、BCC32Xがリンカを呼出すので設定ファイル(ilink32.cfg)はなくて良い。
・BCC5.5では、設定ファイル(ilink32.cfg)を各自が作成していた。
 メイク   make.exe  5.4.1  make.exe  5.2  プロジェクトから実行ファイルを作成
     builtins.mak  -  BCC5.5では、メイクの初期設定ファイル(buitins.mak)が添付
 C++プリプロセッサ  cpp32c.exe  7.30  cpp32.exe  5.5.1 エンバカデロC++では、Clangベース
 リソースコンパイラ    rc.exe  6.0.5724.0  brc32.exe  5.4 エンバカデロC++では、Microsoft製のRCが添付、BCC55ではBorland 製のリソースコンパイラ、バインダが添付
 rlink32.dll  −  rlink32.dll  - ikink32が呼び出し、exeに.resをリンク
RcDLL.dll   −      
 インポート・ライブラリ作成ユーティリティ  implib.exe  3.4.0  implib.exe  3.0.22
 ライブラリアン(ライブラリ作成・修正)  tlib.exe  6.4 tlib.exe  4.5 ライブラリの作成や修正を行う
 ダンプ・ユーティリティ tdump.exe  6.5.4.0  tdump.exe  5.0.16.12 EXE、OBJ、LIBファイルなどを解析する
 文字列検索ツール(Grep) grep.exe   5.6  grep.exe  5.5  
 タイムスタンプ更新 touch.exe   5.0  touch.exe  4.2  
 RTL(ランタイムライブラリ)  cc32c250.dll  -  cc3250.dll  -  
cc32c250mt.dll   -  cc3250mt.dll  -  
 その他   lnkdfm250.dll   -  lnkdfm50.dll  -  
     brcc32.exe  5.4  
     rw32core.dll  -  
BCC5.5のみにあり        coff2omf.exe  -  インポートライブラリをCOFF形式からOMF形式に変換するユーティリティ
     impdef.exe  -  DLLからモジュール定義ファイル(.DEF)を作成
     fconvert.exe  -  テキストファイルのOEM形式とANSI形式を相互に変換
     trigraph.exe  -  トライグラフシーケンスをサポート
           


2)BCC32(BCC32C、BCC32X)とILINK32の初期設定ファイル
@ BCC5.5
BCC32.EXE用の設定ファイルとして、「bcc32.cfg」を作成しなければなりません。-Iはコンパイル用のヘッダ・ファイルの保管場所、-Lは、リンク用のライブラリの保管場所です。

ILINK32.EXE用の設定ファイルとして「ilink32.cfg」も作成しなければなりません。リンカが必要とするリンク用のライブラリの保管場所を-Lで指定しています。
(下の例は、このBCC5.5の保管場所を標準の「c:\borland\bcc55」にした場合です)

bcc32.cfg
-I"c:\Borland\Bcc55\include"
-L"c:\Borland\Bcc55\lib;c:C:\Borland\Bcc55\lib\PSDK"
ilink32.cfg
-L"C:\Borland\Bcc55\lib;C:\Borland\Bcc55\lib\PSDK"

A エンバカデロ C++
BCC32C.EXEの設定ファイルとして「bcc32c.cfg」が、標準で準備されています。
コンパイル用のヘッダ・ファイルの保管場所、リンカに引き渡すためのライブラリの保管場所が指定されています。最後の行(「-Xdriver -Qunused-arguments」)の前半の「-Xdriver」は、BCC32C.EXEに対してBCC32互換のオプションではなく、本来(Clang)のオプションを指定します。「-Qunused-arguments」は、使用されていない引数のエラーを出すことを指定します。

bcc32c.cfg

-isystem @\..\include\dinkumware64
-isystem @\..\include\windows\crtl
-isystem @\..\include\windows\sdk
-L@\..\lib\win32c\debug
-L@\..\lib\win32c\release
-L@\..\lib\win32c\release\psdk
-Xdriver -Qunused-arguments

BCC32X.EXEの設定ファイルとして「bcc32x.cfg」が、標準で準備されています。
コンパイル用のヘッダ・ファイルの保管場所、リンカに引き渡すためのライブラリの保管場所が指定されています。

bcc32x.cfg

-isystem @\..\include
-isystem @\..\include\dinkumware64
-isystem @\..\include\windows\crtl
-isystem @\..\include\windows\sdk
-isystem @\..\include\windows
-L@\..\lib\win32c\release
-L@\..\lib\win32c\release\psdk

3)MAKEの初期設定ファイル
ソースファイルをまとめて、コンパイル・リンクを自動で行う「MAKE.EXE」用の
初期設定ファイル(builtins.mak)がBCC55には用意されていました。
「CC = bcc32」などで、コンパイラ、リンカなどの実際の名前を登録し、「.c.exe: $(CC) $(CFLAGS) $&.c」など、コンパイルの標準が登録されていて、MAKE.EXEを動かしたときに最初に見に行きます。
エンバカデロ C++では、用意されていません。必要に応じて、改造して利用すればよいと思います。

4)プログラム作成上の留意点
@ main関数の戻り値
「void main(argc、*argv[])」は許されなくなり、「int main(argc、*argv[])」にする必要があります。当然、「return;」ではなく、「return 0;」または「return(0);」です。

A コメントのネスティング
BCC5.5では、コンパイラ(BCC32.EXE)のオプション(「−C」)で、許されていましたが、エンバカデロ C++1では、許されません、「−C」オプションは無効です。
例えば、「/* comment /* nest */ */」が、エラーになります。「/*」から、最初の「*/」までを機械的にコメントとみなされます。

B RC(リソースコンパイラ)
BCC5.5では、Borland製のBCCR32.EXEでしたが、エンバカデロ C++では、マイクロソフト製のRC.EXEに代わっています。

C日本語フォルダ・ファイル名
日本語と半角文字が混ざったファイル名、フォルダ名のため、BCC32CやILINK32が正常に動かなことがあります。その場合、半角文字のみに変更するように願います。

ホーム  前へ  次へ