VC++9.0でOpenMP使用時の注意点
目次
OpenMPを使ったCライブラリをPythonで使うためにPython本体のバージョンと合わせてVC++9.0でコンパイルしていたときに次の問題に遭遇しました。出来上がったDLLをロードするとVC++ランタイムがインストールされているにも関わらず、vcomp90.dllが見つからないとエラーが出るというものです。この問題で少々時間を食ったので原因と解決方法をメモしておきます。
原因
まず、システムがvcomp90.dllを見つけられなかった原因は、マニフェストファイルに「Microsoft.VC90.OpenMP」の記載がなかったことでした。
マニフェストファイルとは依存する共有ライブラリのバージョンなどを指定するファイルで、システムはそれを見て適切なDLLをロードします。通常、実行ファイルや共有ライブラリをコンパイルする際にVC++が依存ライブラリをスキャンして生成してくれます。今回はマニフェストにOpenMPライブラリの記載がなかったためvcomp90.dllを見つけられなかった訳です。
ではなぜOpenMPを使用してるのにもかかわらずマニフェストにOpenMPの記載がなかったかというと、その原因は**「omp.h」をインクルードしていないこと**でした。VC++9.0では、「omp.h」をインクルードすることがマニフェストにOpenMPを記載するトリガーのようです。
ちなみに、VC++11.0やVC++12.0では「omp.h」をインクルードしていなくても適切にOpenMPライブラリをロードできているようでした。
解決方法
「omp.h」をインクルードしましょう。