https://nidclip.wordpress.com/2014/02/25/compiling-openvdb-the-openvdb-viewer-on-windows-7/
の手順にVisual Studio 2012でビルドしたときに躓いたところのメモをいくつか追加したもの.Visual Studio 2012でのビルドを前提としている.
- OpenVDB本体ビルドのために必要なライブラリのビルド
OpenVDBをビルドするために少なくともboost, zlib, OpenEXRのHalfクラス, TBBが必要なので,
これらをビルドしておく必要がある(OpenVDBに含まれているViewerライブラリを使う場合はさらにglewとglfwも必要).
- boostのビルド
boostのダウンロードページからWindows用バイナリ
(DOWNLOADのところのOTHER DOWNLOADSの"Prebuilt windows binaries."からmsvc-11(VS2012の場合))
をダウンロードしてインストールしておく.各*.hファイルが入ったboostフォルダごとインクルードフォルダに,
スタティックリンクの場合は,libboost_chrono,date_time,system,thread-*.libをライブラリフォルダにコピーしておく.
- zlibのビルド
[build_zlib]を参考にビルドし,zlib.libをライブラリフォルダに,zlib.hとzconf.hをインクルードフォルダにコピーしておく.
- OpenEXRのHalfクラスのビルド
- OpenEXRの中で必要なのはHalfクラスだけなので,OpenEXRのダウンロードページ
からIlmBaseだけをダウンロードする.最新版のilmbase-2.2.0.tar.gzだとvcフォルダがなかったのでこの説明では一つ前のilmbase-2.1.0.tar.gzをダウンロードして使用している.
- ダウンロードしたファイルを解凍し,vc/vc8/IlmBase/IlmBase.slnをVisual Studioで開く(必要に応じてプロジェクトファイルの変換を行う).
- 必要に応じて構成を変えてHalfプロジェクトをビルドする(ソリューションではなくHalfプロジェクトだけでよい).
- vc/vc8/IlmBase/Win32 or x64/Release or DebugフォルダにできるHalf.libをライブラリフォルダに,Half.dllを実行フォルダに,Halfフォルダ内の*.hファイルをインクルードフォルダにコピーしておく.
- TBBのビルド
- TBBのソースコードをダウンロードページからダウンロードする
(tbb43_20150611oss_src.tgzなど).
- ダウンロードしたファイルを解凍し,build/vs2010/makefile.slnをVisual Studioで開く(必要に応じてプロジェクトファイルの変換を行う).
- 必要に応じて構成を変えてビルドする.
- build/vs2010/ia32 or intel64/Debug or Releaseフォルダにできるtbb.libをライブラリフォルダに,tbb.dllを実行フォルダに,includeフォルダ内のserialとtbbフォルダをフォルダごとインクルードフォルダにコピーしておく.
- OpenVDBのビルド
すべての必要なライブラリがビルドできたら,OpenVDB本体をビルドする.
- OpenVDBのダウンロードページからCore library(openvdb_*_*_*_library.zip)をダウンロードして解凍しておく(解凍フォルダを以下openvdbとする).
- Visual Studioを開いて新しいプロジェクトを作成する.プロジェクト作成ウィザードでは"Visual C++"の"Win32コンソールアプリケーション"を選択,右下の"ソリューションのディレクトリを作成"のチェックを外して"OK"&"次へ"をクリックする."アプリケーションの設定"のところで"アプリケーションの種類"を"スタティックライブラリ"にし,"追加のオプション"の"プリコンパイル済みヘッダー"のチェックを外して"完了"(SDLチェックも外しておくこと!).
- openvdbフォルダ内のヘッダファイル(*.h),ソースファイル(*.cc)をプロジェクトに追加する.io,math,metadata,tools,tree,utlsサブフォルダ内のヘッダ/ソースファイルも同様.
- math/Coord.hに
#define NOMINMAX
を追記,io/Compression.ccに
#define ZLIB_WINAPI
を追記する.
- OpenEXRのHalfクラスのビルドでHalfのみビルドした場合は,Types.hの
#include <OpenEXR/half.h>
を
#include <half.h>
に修正する.
- プロジェクトのプロパティで"C/C++"⇒"コード生成"⇒"ランタイムライブラリ"をReleaseならマルチスレッド(/MT),Debugならマルチスレッドデバッグ(/MTd)にする.マルチスレッドDLLやマルチスレッドデバッグDLLにしたい場合は,OpenVDBを使用するプロジェクト側で"C/C++"->"プリプロセッサ"の"プリプロセッサの定義"に OPENVDB_STATICLIB を追加すること
- プロジェクトのプロパティで"C/C++"⇒"全般"の"追加のインクルードディレクトリ"に上記でビルドした必要なライブラリを入れたインクルードフォルダのパスとopenvdbがあるフォルダのパスを指定する.
- プロジェクトをビルド.
- OpenVDBのサイトのコードサンプルを使ってライブラリをテストしてみる.OpenVDBのlibファイルは自分がプロジェクトで設定したところにできるが,ヘッダファイルは面倒なのでopenvdbフォルダごとインクルードフォルダにコピーして,
#include <openvdb/openvdb.h>
とインクルードしてやればよい.
- 注意事項
- OpenVDBのビルドで符号付きと符号なしのキャストエラーやstd:getenvに関するエラーが出る場合は,プロジェクトのプロパティでC/C++->全般の"SDLチェック"を"いいえ"にする
- サンプルプログラムを生成する際は,プロジェクトのプロパティのリンカー->入力の"特定の既定のライブラリの無視"にlibcmt.libを追加しておく(Debugの場合はlibcmtd.lib)