環境
- Windows 10
- OpenCV 4.0.1
- Visual Studio 2017 Community
- CMake 3.11.3
症状
OpenCV3.4とVisual Studio 2017で画像処理プログラムを組もうとしていたところ。
Debugモード(x64)ではビルド実行まで問題なく動くものの、Releaseモードにした途端に
ビルドは成功するものの、ランタイムエラーとなり以下のエラー文を出力された。
「hdf5.dllが見つからないため、コードの実行を続行できません。プログラムを再インストールすると、この問題が解決する可能性があります。」
考察 (結果だけ見たい人は飛ばしてください)
hdf5.dllがない問題について、Releaseモードでソースをコンパイルしてリンカーでdllと結合する時にhdf5.dllがないと言われているので、じゃあ安直だがhdf5.dllを探して該当ファイル構造に組み込んでやればいいと思った。調べるとwindowsではregsvr32.exeを実行して.dllファイルを登録することが出来るらしい。hdf5.dllは以前に構築したpython環境下にあったので、コピペして登録してみたが、上手くいかなかった。どうやらこれは間違いのようだ。
新しくVC++プロジェクトを再作成し、OpenCVを設定した後、自動出力されたHello, WorldプログラムにOpenCVをincludeしてRelease実行したところ、同様のエラーを吐いたので、恐らくソースコードに問題があるわけではなさそう。
同じ問題に直面している人がいたので、リンクを貼っておく。
[2018-9-18. Getting the error : 'The code execution cannot proceed because hdf5.dll was not found' in Visual Studio 2015]
https://stackoverflow.com/questions/52387277/getting-the-error-the-code-execution-cannot-proceed-because-hdf5-dll-was-not
リンク先コメント欄ではプロジェクト設定のビルドイベントにxcopyを入れろとの回答があったが、質問者はpython tool for visual studio 2015インストールしたらエラー吐かなくなったよ!と言っていた。なんだそりゃ。
試しにVisual Studio Installerでpythonツールをインストールしてみたがやはり同様のエラーだった。しかしソースに問題はない(はず)ので、opencvのcmakeビルドからやり直してみることにした。最初のcmakeビルド構築手順から間違っているのではないかと予想した。というわけで以下を参考にpython環境も同時にビルドすることにした。
[2016-01-05 OpenCV3.1の導入with CMake]
https://yumetodo.hateblo.jp/entry/2016/01/05/161620
結果
結論から言うと無事にRelease, Debugモードで実行することが出来ました。
原因はVisual Studio側ではなく、OpenCVをCMakeでビルドする時にPython環境をまとめてビルドしてやる必要があったということ。c++版をビルドしているはずなのに何故python?という疑問がありましたが、OpenCVが裏で何をやってるのかは分からないので、詳しい方は感想や意見をコメントで残してくれると嬉しいです。
ただ、この記事を書いてる時点で既にOpenCV4.0.1がリリースされていたので、CMakeで最初からビルドし直すならもうOpenCV4に移行しようと思いまして、冒頭の3.4ではなく4でビルドしていますのでご注意ください。
コメントや意見、質問などありましたらお願いします。役に立ったと思ったらいいね押しといてください。