OpenCASCADE 6.4.0 を Microsoft Visual Studio 2008 (vc9) 32bit 環境でビルドする

OpenCASCADE の最新版 6.4.0 からは、それまでの 6.3.* が VisualStudio 2003 ベースで開発されていたのに対し、 2005 ベースで開発されている。

公式マニュアルによると 6.4.0 がサポートしている VisualStudio のバージョンは、2003 がそのラインナップから外れ、2005(vc8)、2008(vc9)、2010(vc10) のみとなった。

ビルドに必要な環境変数を設定し、ホストにインストールされている VisualStudio のバージョンを識別後、実行してくれる BAT ファイルも付属しているのだが、不具合の為、上手く動作してくれない*1

そこで、簡単なスクリプトファイルを記述し、OpenCASCADE と付属のサンプルをビルド、実行するところまでをまとめてみた。

本記事では、日本語版の VisualStudio 2008 32bit環境をベースに書いているが、2008 と、開発ベースとなった 2005 以外のバージョン (執筆時点では、2010 のみ) でビルドする際には、読み替えて実行すれば上手く行くかもしれない。

また、Microsoft の嫌がらせとしか思えないような VisualStudio のバージョン名と Visual C++ のバージョンは、混同しがちなので、以降の記事は後者だけを用いる事にする。

Visual Sutido の名前 Visual C++ バージョン名
Microsoft Visual Studio .NET (いわゆる 2002) vc7
Microsoft Visual Studio .NET 2003 vc7.1 または vc71
Microsoft Visual Studio 2005 vc8
Microsoft Visual Studio 2008 vc9
Microsoft Visual Studio 2010 vc10

OpenCASCADE 6.4.0 のセットアップ

6.4.0 のセットアップファイルには、以下のものがある。

ベース
OpenCASCADE640_win32.exe OpenCASCADE 本体
OpenCASCADE640_doc.exe OpenCASCADE ドキュメント
サードパーティ ライブラリ ( 32bit/vc9 でビルド済み )
freetype-2.3.7-vc9-32.exe FreeType フォントライブラリ
ftgl-2.1.2-vc9-32.exe FreeType フォントを OpenGL で使う為のライブラリ
gl2ps-1.3.5-vc9-32.exe OpenGL/PostScript 関連のライブラリ
jdk1.6.0-32.exe Java SDK 1.6.0
qt462-vc9-32.exe GUI-AF である Qt の Windows 移植版
tbb.exe Intel のマルチスレッド処理サポートライブラリ
tcltk-85-32.exe GUI-AF である Tcl/Tk の Windows 移植版

同じ GUI アプリケーションフレームワークである Qt と Tcl/Tk だが、前者は Qt を使ったサンプルファイル用に必要となるだけで、必須ではない。対して後者は、OpenCASCADE 内部で Tcl 部分をインタプリタ言語として利用している為、必須だ。

OpenCASACDE 本体、ドキュメントの順にインストールを行い、サードパーティライブラリは自己解凍形式の RAR なので、任意の場所に展開すると良い。ただし、OpenCASCADE のインストールディレクトリには既に、vc8 でビルド済みのバイナリが収められた 3rdparty ディレクトリがあるので、こちらには展開せず、

C:\OpenCASCADE6.4.0\3rdparty.vc9\freetype-2.3.7-vc9-32\

のように、別ディレクトリに配置した方が良い。

また、本記事では OpenCASCADE をインストールしたディレクトリを私の環境と同じ「E:\occ640」とする。違う場合は、適宜読み替えてもらいたい。

「スタートメニュー」に「OpenCASCADE 6.4.0」が作成され、「Draw Test Harness」を実行してみて、エラーなくコマンドプロンプトと Tcl/Tk のメニューバーが表示出来れば、インストールは正常に完了している。開いたウィンドウは、そのまま閉じて終了して良い。

OpenCASCADE 6.4.0 のディレクトリ構造

OpenCASCADE をインストールしたパスに配置されるディレクトリは以下のようになる。

3rdparty

サードパーティ製のライブラリを格納しているディレクトリ。それぞれ vc8 でビルドしたバイナリファイルが納められている。

3rdparty.vc9

vc9/32bit にてビルド済みのサードパーティライブラリを格納する。通常のインストールでは作成されない為、自分で作り、直下にライブラリフォルダを配置してやる。

data

サンプル等で利用する三次元データファイルなどが納められている。

doc

全体的な事を記載したドキュメントが納められている。別にインストールした OpenCASCADE_doc には、より詳細なクラスリファレンスが収録されている。

ros

OpenCASCADE のコアとなるソースファイル、ライブラリなどが納められている。環境変数 CASROOT が示すディレクトリ。

ros/adm/win*/vc*

32bit/64bit版の VisualStudio 各バージョン用のソリューションファイルが納められている。

ros/drv

WOK により生成されたソースファイルが納められている。

ros/inc

OpenCASCADE の主要ヘッダが納められている。

ros/src

OpenCASCADE の主要ソースがモジュール単位で納められている。

ros/win32/vc*

OpenCASCADE をビルドすると生成されるライブラリ( *.lib、*.dll )を格納する場所。これらのライブラリをサンプルや自作アプリケーションから参照する。

ros/*.bat

OpenCASCADE をビルド/実行する為に必要な環境変数を設定する BAT ファイル群。VisualStudio を標準ディレクトリ ( C:\Program Files 配下) にインストールしている環境だと、そのままでは動作しない。それぞれの用途は以下のとおり。

  • draw.bat

Draw Test Harness ( DRAWEXE.exe ) を起動する為のスクリプト。

  • env.bat

OpenCASCADE の実行に必要な環境変数を設定するスクリプト。

  • env_build.bat

インストールされている VisualStudio 環境を識別し、OpenCASCADE を VisualStudio でビルドする為に必要な環境変数をセットするスクリプト。

  • msvc.bat

VisualStudio を環境変数をセットした上で、実行するスクリプト。

samples

Qt、Java、MFC などによるサンプルプロジェクトとソースが納められている。

ビルド環境の構築

OpenCASCADE およびサンプルをビルドする為には、以下のような手順が必要だ。

  1. 環境変数をセットするスクリプトを修正する。
  2. VisualStudio のインクルードパス/ライブラリパスを追加する。
  3. サンプルプロジェクトのリンカ設定を vc9 用に変更する。

OpenCASCADE 自体、開発環境として UNIX 系 OS を基として開発されているので、環境変数による参照が多々発生する。まずは、その環境変数を正しくセットする為に、BAT スクリプトを修正しよう。

ビルド用の BAT スクリプトを作成する

E:\occ640 に Build.bat という名前の空ファイルを作成し、テキストエディタで以下のように記述する。

set CASROOT=E:\occ640\ros
call %CASROOT%\env_build.bat vc9 win32
devenv.exe "%1"

1行目、CASROOT という変数を定義する。これは、OpenCASCADE のインストールパスにある ros ディレクトリを示すもので、これがないと動作しない一番大切な変数だ。

2行目、ros ディレクトリ内の env_build.bat を引数付きで呼び出している。今回は、vc9 で 32bit バイナリを作成するので、このような引数となる。

3行目、env_build.bat が正しく実行されれば、vc9 の devenv.exe ( VisualStudio の本体 EXE ) のあるディレクトリが環境変数 PATH に設定される為、ファイル名のみで devenv.exe を起動する事が出来る。引数 %1 は、BAT ファイルが受け取った第一引数。

このファイルのショートカットを、デスクトップなり、「送る」フォルダなりに置いておこう。今後、OpenCASCADE 関連の VisualStudio ソリューションを開く時は、この BAT ファイル ( or ショートカット ) にファイルをドラッグアンドドロップして実行する。この BAT ファイルを介さない起動方法を、「通常どおり起動」と記載する事にする。

ros/env_build.bat を修正する

次に、ros ディレクトリに移動し、env_build.bat を開く。

set PRODUCTS_PATH=%~dp0..\3rdparty

となっている行の行頭に”rem “を付与し、以下のとおり行を追記する。

rem set PRODUCTS_PATH=%~dp0..\3rdparty
set PRODUCTS_PATH=E:\occ640\3rdparty.vc9

サードパーティライブラリの格納パスを、同梱されていた vc8 版から、新たに作成した vc9 版ディレクトリに変更したのだ。さらに、( 多分、バグであろう ) 環境変数 VCVARS に代入している処理も修正しておく。

if /I "%1" == "vc8" (
set VCVER=vc8
set VCVARS=%VS80COMNTOOLS%..\..\VC\vcvarsall.bat
) else if /I "%1" == "vc9" (
set VCVER=vc9
set VCVARS=%VS90COMNTOOLS%..\..\VC\vcvarsall.bat
) else if /I "%1" == "vc10" (
set VCVER=vc10
set VCVARS=%VS100COMNTOOLS%..\..\VC\vcvarsall.bat

となっている箇所を

if /I "%1" == "vc8" (
set VCVER=vc8
set VCVARS="%VS80COMNTOOLS%..\..\VC\vcvarsall.bat"
) else if /I "%1" == "vc9" (
set VCVER=vc9
set VCVARS="%VS90COMNTOOLS%..\..\VC\vcvarsall.bat"
) else if /I "%1" == "vc10" (
set VCVER=vc10
set VCVARS="%VS100COMNTOOLS%..\..\VC\vcvarsall.bat"

という風に、VCVARS=以下の値をダブルクォーテーションで囲む。この処理がないと、前述のとおり「C:\Program Files」配下にインストールした VisualStudio を正しく識別出来ない。また、env.bat にもサードパーティライブラリのパスを設定している箇所があるが、env_build.bat から呼び出された際には既にそれらのパスは正しいものに設定されている為、こちらは編集する必要はない。

VisualStudio のインクルードパス/ライブラリパスを追加

次に、VisualStudio を通常どおり起動する。メニューの「ツール」>「オプション」>「プロジェクトおよびソリューション」>「VC++ ディレクトリ」を開き、以下のパスを追加する。

■ インクルード パス

$(TBBDIR)\include

$(TCLHOME)\include

$(JAVAHOME)\include

$(JAVAHOME)\include\win32

$(FTDIR)\include

$(FTDIR)\include\freetype

$(FTGLDIR)\include

$(GL2PSDIR)\include

$(QTDIR)\include\QtGui

$(QTDIR)\include\QtCore

$(QTDIR)\include\Qt

$(QTDIR)\include

■ ライブラリ パス

$(TCLHOME)\lib

$(FTGLDIR)\lib

$(GL2PSDIR)\lib

$(QTDIR)\lib

$(TBBDIR)\lib\$(TBBARCH)\$(VCVER)

なお、これらのパスは前述の BAT ファイルによりそれぞれ、環境変数 INCLUDE、環境変数 LIB に登録され、本来であれば VisualStudio が自動的に参照するものだ。ただし、この INCLUDE と LIB は、VisualStudio が上手く参照しない場合があるようなので、面倒ではあるが、ここで明示的に定義しておくのが良いと思う。

サンプルプロジェクトのリンカ設定を変更

Samples/mfc ディレクトリに移動し、All.sln を通常どおり開く。すると、vc8 で作成されたプロジェクトの為、プロジェクトの変換ウィザードが実行される。ウィザードの手順に添って、vc9 用にソリューション/プロジェクトを変換しよう。

変換後、ソリューションエクスプローラを見ると、以下の 11 プロジェクトが含まれている事が分かる。

Geometry ジオメトリサンプル
Modeling モデリングサンプル
Viewer2d 2Dビューアサンプル
Viewer3d 3Dビューアサンプル
ImportExport データの入出力サンプル
Ocaf OpenCASCADE アプリケーションフレームワーク
Triangulration 三角メッシュ処理のサンプル
HLR
Animation アニメーションサンプル
Convert データ変換サンプル
mfcsample MFC 用の共有ライブラリ

ソリューション構成を「Debug」から「Release」に変更後、を mfcsample プロジェクトの設定画面を開き、「構成プロパティ」>「リンカ」>「全般」を開く。そして、「追加のライブラリ ディレクトリ」の値で「vc8」となっている箇所を「vc9」に変更して「適用」を押す。

その他 10 個のプロジェクトも、同じように変更してやる*2

変更が終わったら、全て保存した上で VisualStudio を終了させよう。

これで、前準備は完了した。

OpenCASCADE のビルド

OpenCASCADE の VisualStudio によるビルド方法は二つある。モジュール単位でのビルドと一括ビルドだ。原因究明がしやすいよう、環境を整えた最初のビルドは、前者をオススメする。

モジュール単位でのビルドは、E:\occ640\ros\adm\win32\vc9 ディレクトリにある以下のソリューションを順番にビルドしていく。

  1. ファンデーションクラス (ファイル名:FoundationClasses.sln)
  2. モデリングデータ (ファイル名:ModelingData.sln)
  3. モデリングアルゴリズム (ファイル名:ModelingAlgorithms.sln)
  4. ビジュアライゼーション (ファイル名:Visualization.sln)
  5. アプリケーションフレームワーク (ファイル名:ApplicationFramework.sln)
  6. データ変換 (ファイル名:DataExchange.sln)
  7. ドロー (ファイル名:Draw.sln)
  8. ラッパ (ファイル名:Wrappers.sln)

まず、ros/adm/win32/vc9 ディレクトリの FoundationClassess.sln を先ほど作成した BAT ファイルまたはショートカットにドラッグアンドドロップし、VisualStudio を起動する。次に、ソリューション構成を「Debug」から「Release」に変更した後、メニューの「ビルド」>「ソリューションのリビルド」を実行する。

全てのプロジェクトがエラーなく、ビルド完了したら、そのまま VisualStudio を閉じ、次のソリューションを同様にビルドしていく。

一括ビルドは、上のソリューション一覧に含まれる全 78 プロジェクトが、ひとつのソリューション OCCT.sln にまとめられている。 BAT ファイル経由で起動した VisualStudio で OCCT.sln を開き、ソリューション構成を「Debug」から「Release」に変更、「ソリューションのリビルド」を行う事により、一気にビルド処理が走る。ちなみに、手元の Core i5 ラップトップでビルド時間を調べたところ、全てビルドするのに40分かかった。

エラーが出た場合

「TKernel.lib が見つかりません」、「jni.hが見つかりません」といったエラーメッセージが出てくる場合、ほとんどが参照パスの設定ミスかファイルの配置ミスであるので、もう一度見直してみた方が良い。

また、OpenCASCADE のソースコードの多くは、フランスやロシアで開発されている為、VisualStudio 標準の日本語環境(CP932)では正しく解釈できない場合がある。特に、コメントに記述されたフランス語が、後に続く改行文字やコメント終了文字を打ち消してしまい、エラーになる問題が発生する場合がある。これらはソースコードを正しく書き換えるか、nkf などのツールを用いて、ソースファイルを Unicode に変換すれば対処できる。

全てのビルドが完了すると、ros/win32/vc9 ディレクトリに bin ディレクトリと lib ディレクトリが作成され、それぞれ *.dll と *.lib、*.exp などのファイルが生成される。このライブラリを参照する事により、サンプルや自作アプリケーションで OpenCASCADE の機能を使う事が出来る。

サンプルのビルド

先ほど変換しておいた samples/mfc ディレクトリの All.sln を BAT ファイル経由で開く。ソリューション構成が「Release」になっている事を確認し、メニューの「ビルド」>「ソリューションのリビルド」を実行する。標準では、全てのサンプルから参照されている MFC 用ライブラリ mfcsample.dll が最初にビルドされ、次にその他のプロジェクトがビルドされる。

スタートアッププロジェクトには、Geometry が設定されている為、「デバッグ開始」ボタン(緑色の再生ボタン)をクリックすると、2 つのウィンドウを持つ、Geometry.exe が起動される。

OpenCASCADE を記載している C++ は、他のプラットフォームでもしっかりとコンパイルできるよう、C++/CLI のように Microsoft が勝手に作り出した CLI 用言語ではない。つまり、.NET Framework も利用していない。今回は、VisualStudio を利用する事もあり、サンプルとして MFC 版をビルドしてみたが、たとえ Windows アプリケーションに実装しようとしていても、 Qt や Java などをアプリケーションフレームワークとして採用するのがいいと思う。

*1:空白文字を含むパスにインストールされた VisualStudio を上手く起動する事が出来ない

*2:vc8 環境が要らないなら、プロジェクト設定を変更するよりも、vc9 にジャンクション/シンボリックリンクを貼った方が手間はかからない。ただ、後で見た時混同しやすくなるので、出来るだけここは設定しておいた方が良いと思う。

コメントを残す

メールアドレスが公開されることはありません。