コンパイルとビルド構成
概要
Houdini HDK + OpenCL を用いたカスタムSOPは、C++ソースからDLLを生成する構成になっており、ビルド時には同名DLLが自動的に上書きされる。
手動でDLLを削除する必要は原則なく、問題になるのは「HoudiniがDLLをロード中かどうか」である。
ファイル構成と役割
-
.C
SOPノード本体のC++実装で、CPU処理・OpenCL呼び出し・UI定義を含む。 -
.h
.Cに対応するヘッダファイルで、クラス定義と関数宣言をまとめたもの。 -
.cl
OpenCLカーネルコードで、GPU上でHeightFieldの勾配計算やマスク生成を行う。 -
.o
.Cをコンパイルして生成されるオブジェクトファイル(リンク前の中間成果物)。 -
.lib
DLLに対応するインポートライブラリで、リンク時に参照される。 -
.exp
DLLビルド時に生成されるエクスポート情報ファイル(公開シンボル一覧)。 -
.dll
Houdiniが実際にロードするSOPノード本体で、ビルド時に自動的に上書きされる。
DLLが「上書きされる」仕組み
-
ビルドツール(
hcustom/ Visual Studio など)は
同名のDLLが存在する場合、削除せずに再生成して上書きする -
そのため、通常はDLLを手動で消す必要はない
-
問題が起きるのは、HoudiniがDLLをロードしたままの状態で再ビルドした場合
Houdini起動中はDLLがロックされるため、
上書きに失敗したり、古いDLLが使われ続けることがある。
実運用での基本フロー
-
Houdiniを終了する
-
ビルドを実行(DLLは自動で上書きされる)
-
Houdiniを再起動して新しいDLLをロードする
この流れが最も安全でトラブルが少ない。
Tips
-
DLLを毎回消していたのは「確実に更新されているか不安だった」ためで、挙動としては理解できる
-
実際には DLL削除よりも Houdini再起動の有無が重要
-
将来的にホットリロードを考えるなら、DLL名を変える運用が必要になる
まとめ
-
この構成は HDKでSOPをDLLとして生成する典型的なビルド構成
-
.o → .lib/.exp → .dllの順で成果物が作られる -
DLLはビルド時に自動上書きされるため、手動削除は不要
-
問題の本質は DLLの上書きではなく、Houdiniによるロード状態