第1回 C言語に触れてみよう | 日経 xTECH(クロステック) を読んで「Borland ってフリーのコンパイラがあったのかぁ」と今更ながらに気づいたので,CLX C++ Libraries を BCC5.5 に対応中*1.対応版は後ほどリリースするとして,今回は BCC5.5 で CLX C++ Libraries を使うための環境設定についてメモしておきます.尚,Visual Studio で使用する場合は VC++ 2010 の環境設定 - Life like a clown を参照して下さい.
Borland C++ Compiler 5.5 のインストール
第1回 C言語に触れてみよう | 日経 xTECH(クロステック) で紹介されている Borland C++ Compiler 5.5 With Command Line Tools からダウンロード&インストール.特に難しい箇所はなかったように思います.
BCC5.5 は,bcc32.cfg および ilink32.cfg と言う設定ファイルでインクルード&リンク関係を設定しておけるようです.BCC55\Bin 以下に bcc32.cfg, および ilink32.cfg ファイルを作成し,それぞれ以下のような設定を記述しておきます.
bcc32.cfg
-I"C:\Borland\BCC55\Include" -L"C:\Borland\BCC55\Lib"
ilink32.cfg
-L"C:\Borland\BCC55\Lib"
-L の引数として C:\Borland\BCC55\Lib\PSDK も追加しておいた方が良いのかもしれません.インストールディレクトリを変更した場合は,パスもそれに合わせて変更します.また,コマンドラインから使えるように環境変数の PATH に C:\Borland\BCC55\Bin を追加します.
zlib のインストール
zlib Home Site より最新のソースコードをダウンロードしてきます.解凍したフォルダの中に Borland C++ Compiler 用の Makefile も存在するので,以下のようにして make します.
zlib-1.2.5> make -f win32\Makefile.bor
make に成功すると,フォルダに zlib.lib が生成されるので,これを BCB55\Lib にコピーします.また,zlib.h, zconf.h, zutil.h を BCB55\Include にコピーします(他のヘッダーファイルは不要?)
OpenSSL のインストール
/index.html より最新のソースコードをダウンロードしてきます.解凍してできたフォルダで,コマンドプロンプトから以下のようにコマンドを実行します(※内部で Perl を使用しているので,make 環境に Perl がインストールされている必要があります).
openssl-1.0.0a> ms\bcb4.bat openssl-1.0.0a> make -f bcb.mak
ただし,手元の環境ではエラーが出て make が成功しませんでした.取り合えず,make が通るように修正したソースコード(差分)を以下にアップロードしておきます.
- http://cielquis.net/download/openssl-1.0.0a-borland.patch
- http://cielquis.net/download/openssl-1.0.0a-borland.zip
修正箇所は以下の通りです.
ssl/d1_lib.c
$ diff openssl-1.0.0a/ssl/d1_lib.c openssl-1.0.0a-borland/ssl/d1_lib.c 368,369c368,369 < struct _timeb tb; < _ftime(&tb); --- > struct timeb tb; > ftime(&tb);
crypto/bio/bss_dgram.c
$ diff openssl-1.0.0a/crypto/bio/bss_dgram.c openssl-1.0.0a-borland/crypto/bio/bss_dgram.c 818,819c818,819 < struct _timeb tb; < _ftime(&tb); --- > struct timeb tb; > ftime(&tb);
crypto/rand/randfile.c
$ diff openssl-1.0.0a/crypto/rand/randfile.c openssl-1.0.0a-borland/crypto/rand/randfile.c 85c85 < #define open _open --- > #define open _sopen_s 208c208,209 < int fd = open(file, O_WRONLY|O_CREAT|O_BINARY, 0600); --- > int fd = -1; > open(&fd, file, O_WRONLY|O_CREAT|O_BINARY, 0, 0600);
手元の環境では,この状態でもまだ make 中にエラーが発生しているのですが,ライブラリ自身の make は成功しているようなので取り合えず無視します.make に成功すると out32/libeay32.lib, out32/ssleay32.lib と言う 2 つの lib ファイルが生成されるので,これらを BCB55\Lib にコピーします.また,inc32 フォルダに openssl フォルダが存在するので,これをフォルダごと BCB55\Include にコピーします.
*1:Borland の最新版って 5.5 で良いんでしたっけ?