...ing logging 4.0

はてなブログに移行しました。D言語の話とかいろいろ。

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コンパイラのインストール

qiita.com

dmdのインストールには前回同様にMSIインストーラーを使いますが、途中で出てくる選択肢で、

Install VC**** redistributables to use it with MinGW Platform libraries

を選択してください。

以下、次の2つのフォルダにgdi32.libなどのインポートライブラリがインストールされている前提で説明します。

.\dmd2\windows\lib32mscoff\mingw

.\dmd2\windows\lib64\mingw

 

Visual Studioのインストール

DFLを32-bit COFF及び64-bitでビルドするためには、Microsoft製のツールが必要です。

ここでは、Visual Studio 2015を使って説明します。

後で、スタートメニューの「すべてのアプリ」に追加されているショートカットを使います。

VS2015 x86 Native Tools コマンド プロンプト

 

64-bit環境については次の記事が参考になりますが、DFLをビルドするだけなら、次の記事に書かれている設定をする必要はありません。

qiita.com

 

・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日目の記事でした。