takumi3d
BACK TO NOTES
Unknown |
#Houdini#HDK#OpenCL

コンパイルとビルド構成

概要

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によるロード状態