コンパイル for Windows

Windows 上でソースファイルからコンパイルするには、wxWidgetsLua(Zindaiji3 ver 0.88以降) 及び 必要であれば OpenEXRHDF5 をインストールしておく必要があります。以下は、Visual Studio 2013 でコンパイルを行う手順です。
(執筆時期の違いでバージョンは混在しています)

Zindaiji3ではフリーウェアとして配布したい(環境によるエラーの発生を減らしたい)ということから、ランタイムライブラリはマルチスレッドDLL(/MD) ではなく マルチスレッド(/MT)を使用しています。

実は /MD オプションでも設定をきちんとすれば問題なくDLLファイルを使わない配布用のバイナリを作ることはできるようですが、今となっては修正も大変なので、以前の設定のまま作成することにしています。
ソースコードからコンパイルを行いたいという猛者は、自分でそれらの設定を弄ることができると思いますので、必要に応じて変更してください。

1. wxWidgets のコンパイル

上記の理由から、wxWidgets などのライブラリも、配布元から配布されている実行ファイルではなく、/MT モードでソースからコンパイルすることになります。

Zindaiji3で利用するwxWidgets のバージョンは 1.05 から 2.8 系列 ではなく 3.0 系列を使用しています。wxWidgets-3.0.2.zipをダウンロードして展開します。

開発者の環境では、C:/ProgramFiles/WXWIDGETS/wxWidgets-3.0.2/という場所を作業フォルダとして解凍、コンパイル作業を行い、その場所に作られた *.lib ファイル等を用いて Zindaiji3を作成しています。他の場所で作業する場合は、後でリンクのパスなどをそれにあわせて調整してください。

プロジェクトファイルの変換、プラットフォーム設定

/build/msw/wx_vc12.sln が Visual Studio 2013 用のプロジェクトファイルです。



コンパイルするプラットフォームを設定した後、ソルーション構成で (DLLではない)Debug/Release を選択します。

ソルーションの設定

プロジェクト内にはソルーションが20個ほど存在するので、それぞれでプロパティを開いて、設定を行います。(数が多いので面倒です)



最初に述べたように、ランタイムライブラリをマルチスレッド(/MT)もしくはデバッグ版の場合は/MTdに設定します。同時に「C/C++ 全般」から複数プロセッサによるコンパイルを有効にすると、コンパイルが速く済んで良いかもしれません。


ビルド

2.8系列は、デフォルトではOpenGLを使用できないようにしてありましたが、3.0ではデフォルト設定のままでよいようです。
そのほか、上記以外で2.8のときに必要だった設定変更は大体必要なくなったようです。
この状態で、ソルーションのビルドを行うと、

/lib/vc_lib
/lib/vc_x64_lib

以下に、Zindaiji3のコンパイルに必要な*.lib群が作成されます。

2. LUA 関係のインストール

Zindaiji3 ver 0.88 以降は Lua ライブラリを利用しています。Lua は上記の .dll を使わない(static用)のコンパイル済みライブラリも公式サイトで公開しているので、それを導入します。lua-5.3.x_Win32_vc12_lib または lua-5.3.x_Win64_vc12_lib を環境に合わせてコピーしてください。

デフォルト状態では、C:/ProgramFiles/LUA/lua-5.3.x_Win32_vc12_lib/ C:/ProgramFiles/LUA/lua-5.3.x_Win64_vc12_lib/ にコピーがされたものとしてコンパイルする設定になっています。
必要に応じてインクルードとライブラリのパスを変更してください。

3. HDF5 関係のコンパイル

HDF5の読み込みを有効化するには、HDF5のライブラリを /MT オプションでコンパイルする必要があります。HDF5には、zlib圧縮szip圧縮する機能があるので、これらを有効化するためには、さらに zlib と szip もコンパイルする必要があります。

/MT オプションでのコンパイルは、配布された状態から設定の変更が必要でありやや煩雑です。以下は 1.8.16 の時に Visual Studio 2013を用いて自分の行ったコンパイル手順です。

ソースファイルの入手

HDF5のホームページからソースファイルをダウンロードします。同ページ内で、zlib及びszipのソースファイルも配布しています。
それらを適切な作業フォルダに展開します。

CMakeの導入

CMakeは、環境や設定に合わせてコンパイル用の Make ファイルや、Visual Studio 用のプロジェクトファイルを作成するツールです。コマンドラインでの操作が基本ですが、GUI付の CMake-GUI で操作することもできます。

ZLIBのコンパイル


ソースファイルの直下に、作業用フォルダとして BUILD (名前は変更可能) フォルダを作成します。CMake-GUI上でソースコードの位置と、作業フォルダの位置を設定します。

zlibをコンパイルするためには、CMake-GUI上で以下の様に設定します。



Configureボタンを押すと、どの環境でコンパイルするためのファイルを作成するか聞かれます。Visual Studio 13 もしくは Visual Studio 13 Win64 (64bit用) を選択します。(Visual Studio 2013 は Visual Studio のバージョンとしては 12 になります。)

Configureを実行すると、コンパイル環境のさまざまなチェックが始まります(数分かかります)

Configure後に、オプション設定やパスの設定など、変更できる項目が赤で表示されます。


必要があれば、ここでオプション類を設定し、もう一度Configureを押すと決定になります。その後、Generate ボタンを押すと、BUILD フォルダ内に Visual Studio 用のプロジェクトファイル ZLIB.slnファイルが作成されます。


ZLIB.slnファイルを開き、プラットフォームの選択や、/MT オプションなど必要な設定を行い INSTALL をビルドすることで、インストールが実行されます。インストールには、管理者権限で Visual Studio を実行しておく必要があることに注意しておいてください。

インストール先は、C:\Program Files\ZLIP や、 C;\Program Files (x86)\ZLIB となります。

SZIPのコンパイル

szip も、zlib とほぼ同様の手順でコンパイルとインストールが行えます。

HDF5のコンパイル CMAKE

HDF5もCMakeを用いてプロジェクトファイルを作成します。

/MT オプションでのコンパイルを行うためには、何箇所かの設定を正しく変更しなければいけないのですが、それをまとめて処理するための追加マクロが配布ソースコードの中に隠れているので、それをまず有効化するのが良いでしょう。
私自身は、このマクロを見つける前に自力で設定を変更しようとして、何かの設定を間違えたらしく結局最後までコンパイルを成功させることができませんでした…!

\config\cmake\UserMacros\Windows_MT.cmake

というファイル内に、マクロ本体と有効化のための方法がコメント文で記述されています。
# To use this option, copy both the macro and option code
# into the root UserMacros.cmake file. 
# OR add an include to the root UserMacros.cmake file:
# INCLUDE(path_to_file/WINDOWS_MT.cmake)
上記の処理を行った後に、CMakeでの設定を行います。
また、上記のマクロは Release 用の設定なので、Debug につかうには /NODEFAULTLIB:MSVCRT 部分に /NODEFAULTLIB:MSVCRTD を追加する必要があります。



CMakeのバージョンで文法が多少違うため、警告文が多数表示されるので、警告文の表示を切っておいたほうが良いかもしれません。



最初のConfigure後に、オプションを変更します。



/MT オプション用の設定が、デフォルト状態よりも増えています。
SHARED_LIBS を切り、STATIC_CTR_LIBS を有効にします。



HDF5_BUILD_CPP_LIB
HDF5_ENABLE_SZIP_ENCODING (szip利用時)
HDF5_ENABLE_SZIP_SUPPORT (szip利用時)
HDF5_ENABLE_THREADSAFE
HDF5_ENABLE_Z_LIB_SUPPORT (zlib利用時)

にチェックをつけ、再度 Configure します。
するとSZIPとZLIBのパスが設定できるようになるので、それぞれのBUILDフォルダやを指定して、再度Configureします。



問題なくConfigureできた場合には、Generate することで Visual Studio 用のプロジェクトファイルが作成されます。

Visual Studio で HDF5 のコンパイルを行います。今まで同様にプラットフォーム選択や、/MT オプションの設定も必要です。
(追加マクロを使用した場合は、すでに/MTになっているはずです)

HDF5のコンパイル VisualStudio

○コンパイル中に、H5lib_settings.c H5Tinit.c がありませんとエラーがでる可能性があります。

これらのファイルを自動作成するための実行ファイルは作成されるのですが、ファイルそのものは何故か作成しない(パッケージのバグ?)ので、手動で作成します。
bin/Release(Debug)/H5detect.exe > H5Tinit.c
bin/Release(Debug)/H5make_libsettings.exe > H5lib_settings.c
それらの2つの実行ファイルは直接実行しても、標準出力に結果が出てくるので、コマンドラインのリダイレクトなどを使ってファイルに書き出します。

○インストールを実行すると、圧縮関係の関数が解決されないエラーが発生する可能性があります。



hdf5-static のプロジェクトのライブラリアン設定に.libファイルを追加します。ライブラリアンを追加すると、libzlib.lib 内の関数などをlibszip.lib などが(外部を参照するのではなく)に内部にまとめてコンパイルされるので、上記のエラーが解消されます。



コンパイルとインストールに成功すれば、C:\Program Files (x86)\HDF_Group\HDF5\1.8.16/ もしくは C:\Program Files\HDF_Group\HDF5\1.8.16 にライブラリが作成されます。

4. .gz圧縮関係

ZLIBを利用して.gz圧縮されたファイルの読み込みや出力ができます。デフォルトではONになっているので、インクルードパスやライブラリパスなどを設定します。

.gz圧縮を使用しない場合

プリプロセッサ定義にZLIBという文字が定義してあり、これを削除すると .gzファイルの解凍などの機能をスキップしてコンパイルします。
また、使用ライブラリのlibzlib.libを wxzlib.lib に変更します。
(wxWidgets2.8に含まれているzlibは最新ではないので、変わりに通常のzlibを読み込んでいますが、gz圧縮機能を使わない場合には wxWidgets 内の zlib を使用するようにもどします。)

5 OpenEXRのコンパイル

公式サイトから ilmbase-2.2.0.tar.gz openexr-2.2.0.tar.gz をダウンロードして展開します。

Zindaiji3 で想定している展開場所は
C:/ProgramFiles/OpenEXR/
C:/ProgramFiles/OpenEXR/build32bit (32bitビルド用のフォルダ)
C:/ProgramFiles/OpenEXR/build64bit (64bitビルド用のフォルダ)
ですが、状況に応じてインクルードやライブラリパスを変更してください
まず、ilmbase をコンパイルします。

ilmbase のコンパイル




CMake での設定を行います。
BUILD_SHARED_LIBS と NAMESPACE_VERSIONING を切り、プロジェクトを作成します。

(Versioningを有効にすると、ライブラリの名前にバージョン(2_2)が追加されます。利用する際に設定をそれにあわせるのであれば、必ず切る必要はありません。)



作成したプロジェクトファイルの設定をします。OpenEXRのコンパイルに必須ななライブラリは、図にあるものなので、それらを /MT オプションに変更してビルドします。

openEXR のコンパイル

同様にCMakeで設定をしてプロジェクトを作成します。



OpenEXR は zlib を使っているので、パスを設定する必要があります。初期状態では隠れているので Advanced にチェックをします。



OpenEXRを使うためのメインになるライブラリは IlmImf になります。これをコンパイルするために、まず b44ExpLogTable と dwaLookups をコンパイルする必要があります。



OenEXR をコンパイルするためには、ilmbase のライブラリを利用する必要があります。パスがセットされていない場合は、次のパスをインクルードディレクトリに設定します。
ilmbase-2.2.x/config.windows
ilmbase-2.2.x/Half
ilmbase-2.2.x/Iex
ilmbase-2.2.x/IexMath
ilmbase-2.2.x/IlmThread
ilmbase-2.2.x/Imath
ライブラリパスとして次のパスも設定します。
ilmbase-2.2.x/buildpath/Half/Release(Debug)
ilmbase-2.2.x/buildpath/Iex/Release(Debug)
ilmbase-2.2.x/buildpath/IexMath/Release(Debug) 
ilmbase-2.2.x/buildpath/IlmThread/Release(Debug)
ilmbase-2.2.x/buildpath/IMath/Release(Debug)
最後にIlmImfのライブラリアンの設定に IlmBaseのライブラリを設定してビルドします。
Half.lib
Iex.lib
IexMath.lib
IlmThread.lib
IMath.lib
(ライブラリアンの設定をすると IlmImf.lib に上のライブラリの内容が含まれるようになるので、これをリンクするだけでよくなります。
そうでなければ、上の.libもコンパイル時にリンクが必要になります。

6 Zindaiji3 のコンパイル


以上の下準備の後に、プロジェクトファイルを Visual Studio で開きます。コンパイルのプラットフォームの選択は、

32bit版:Win32 - Release もしくは Win32 - RelHDF5 (HDF5利用時)
64bit版:x64 - RelX64 もしくは x64 - RelHDF5 (HDF5利用時)

としてください。wxWidgets や Lua をインストールした場所などが違う場合は、全般 - 追加のインクルードディレクトリ、及び リンカー - 全般 - 追加のライブラリディレクトリの設定を変更してください。

コンパイルに成功すれば、Zindaiji3の実行ファイルが作成されます。

(実行にはglut32.dll もしくは glut64.dllが必要です。システムフォルダもしくは実行ファイルの位置にコピーしてください。)

戻る
inserted by FC2 system