DFLのビルド方法(32-bit COFF, 64-bit編)
この記事はD言語 Advent Calendar 2022の8日目の記事です。
・はじめに
6日目の記事では、DFLを32-bit OMF形式でビルドする方法を説明しました。
D言語の公式コンパイラdmdは、元々はオブジェクトファイルをOMF形式で出力していましたが、現在はCOFF形式で出力するのがデフォルトになったため、DFL付属のmakelib.batが動かなくなったので、あえてOMF形式でビルドする方法で書きました。
ただ、OMF形式のビルドに限定すると、DFLで遊ぶためにわざわざVisual Studioをインストールしなくていいというメリットがありました。
さて、以前に試したときはうまくいかなかったのですが、色々やってみたらうまくいったので、今回は32-bit COFF形式と64-bit形式でDFLをビルドする方法を説明します。
前回の記事で説明した部分は端折っていきます。
・dmdコンパイラのインストール
dmdのインストールには前回同様にMSIインストーラーを使いますが、途中で出てくる選択肢で、
Install VC**** redistributables to use it with MinGW Platform libraries
を選択してください。
以下、次の2つのフォルダにgdi32.libなどのインポートライブラリがインストールされている前提で説明します。
・Visual Studioのインストール
DFLを32-bit COFF及び64-bitでビルドするためには、Microsoft製のツールが必要です。
ここでは、Visual Studio 2015を使って説明します。
後で、スタートメニューの「すべてのアプリ」に追加されているショートカットを使います。
VS2015 x86 Native Tools コマンド プロンプト
64-bit環境については次の記事が参考になりますが、DFLをビルドするだけなら、次の記事に書かれている設定をする必要はありません。
・undeaDライブラリのビルド
オプションに-a=x86_mscoffを付けてdubを実行すると、32-bit COFF版のundeaDライブラリがビルドでき、binフォルダにundead.libが作られます。
64-bit版をビルドする場合は、オプションを次のとおり修正します。
dub -a=x86_64
いずれもbinフォルダに上書き保存されますので、どちらの形式で作ったか覚えておいてください。
dmdをインストールしたフォルダにあるlib32mscoffフォルダに32-bitでビルドしたundead.libをコピーします。
64-Bit版なら、lib64フォルダに64-bitでビルドしたundead.libをコピーします。
.\dmd2\windows\lib32mscoff\undead.lib
.\dmd2\windows\lib64\undead.lib
・DFLライブラリのダウンロード
今回の記事公開にあたり、DFLを32-bit COFF及び64-bitでビルドするためのバッチファイルを追加、更新していますので、最新版をダウンロードしてください。
前回同様にZIPファイル形式でダウンロードします。
・DFLライブラリのビルド
まずは、32-bit COFF形式でビルドする方法です。
「VS2015 x86 Native Tools コマンド プロンプト」でコンソールを開いて、ZIPファイルを展開したフォルダの中にある.\win32\dflフォルダに移動します。
次に、go.batを実行すると(なんか途中で一杯メッセージが出ますが)、dfl.libとdfl_debug.libが作成されて、.\dmd\windows\lib32mscoffに移動されます。
64-bitでビルドする場合は、.\win32\dflフォルダでgo64.batを実行します。
うまくいけば、dfl.libとdfl_debug.libが作成されて、.\dmd\windows\lib64に移動されます。
・サンプルコードの動作確認
DFLの.\win32\examples\hello_dflに、サンプルコードを置いてあるので、これを動かしてみます。
build32mscoff.batを実行すれば、32-bit COFF形式でコンパイル、実行されます。
build64.batを実行すれば、64-bit形式でコンパイル、実行されます。
タスクマネージャーで見ると「(32 ビット)」の文字がなくなったので、64-bitで動作していることが分かります。
・おわりに
今回の記事では、DFLを32-bit COFF及び64-bitでビルドし、サンプルコードをコンパイルして実行するところまで説明しました。
この説明ではVisual Studioのインストールが必要になるのが面倒なところですが、そういえばundeaDがdubを使ってCOFF形式でビルドできているなら、省略できるのかもしれませんね。
以上、D言語 Advent Calendar 2022の8日目の記事でした。