Published on

Borland C++ Builder - Error invalid OMF record, type 0x021

Authors

作成している SDK が Borland C++ Builder でリンクできないという報告が,今日お客さんからありました.調べてみて初めて知ったのですが,Borland の C++ Builder では,Visual C++ で作成したライブラリをそのままリンクできないようです.そのままリンクしようとすると下記のようなリンクエラーが発生します.

bcc32 main.cpp win.lib -o main Error: 'C:\USERS\DAISUKE\HOME\WIN.LIB' contains invalid OMF record, type 0x21 (possibly COFF)

結果的には,Visual C++ で作成したライブラリ(lib, dll)のインポート用の lib ファイルを coff2omf という borland 標準のツールで変換したらリンク出来ました.検証時の作業をまとめておきます.

インストール

ここ のページの C++ コンパイラの入手方法に従って必要事項を入力し,無償版のコンパイラを取得します.ダウンロードした圧縮ファイルの解凍にはパスワードが必要です.パスワードは登録したメールアドレスに送られてくるので,それを用いて解凍します.

解凍すると freecommandlinetools2.exe と freeturbodebugger.exe ができます.今回はコンパイラのみ必要だったので,freecommandlinetools2.exe をインストールしました.今回はデフォルトの C:\borland にインストールしました.

次にインクルードとライブラリディレクトリの設定をします.C:\borland\bcc55\Bin フォルダに bcc32.cfg ファイルを作成し,下記の項目を入力して保存します.

-IC:\borland\bcc55\Include -LC:\borland\bcc55\Lib

最後に C:\borland\bcc55\Bin へパスを通します.ここまで完了すれば,コマンドラインから bcc32 コマンドにてコンパイルができるかと思います.

ライブラリの変換

coff2omf.exe を用いて,ライブラリを borland からインポートできるように変換します.

coff2omf.exe win.lib win_borland.lib

変換したライブラリをリンクして,動作するか確認します

bcc32.exe main.cpp win_borland.lib -o main ./main