<備忘録> OpenCVのVisual Studioビルドにハマった件

OpenCV 3.0をVisual Studio2013でビルドしたものを使っていたが、Visual Studio2015に環境を変えたいので、VS2015でもビルドした。

無事ビルド完了し実行したのだが、RELEASEビルドが"BEX64 例外コードc0000417"で実行時に落ちる。 DEBUGビルドを実行すると、OpenCVの特徴点Matcherを呼び出した時に得た、マッチング結果の解放時に落ちている。

これはいわゆる、ライブラリとアプリケーションのランタイムの不整合が原因だなと思ってソリューションを見直してみたが、ランタイムはともにマルチスレッドDLLで違い無し。 どうもVS2015から、CランタイムのDLLがユニバーサルCRT(ucrtbase.dll, ucrtbased.dll)に変わったらしく、これが当初バグを含んでいたらしい。ということで、検索結果にしたがってランタイムを正しいものに更新。するとDEBUGビルドは直ったのだが、RELEASEビルドが直らない。

DependencyWalkerで探ってみても、アプリとOpenCVとで呼び出しているランタイムは全く同じに見える。

結局、VS2013のアンインストール、VS2015の修正などさんざん試行錯誤したあげく、試しにOpenCV3.1.0をビルドしてリンクするとエラーが無くなった。 公式のビルド済みバイナリも、VC14バージョンの提供はOpenCV3.1.0からだから、OpenCV3.0 x VC14に問題があったのかな?

というわけで、使っているAPIが全て問題無く動作することを確認した上で、OpenCV3.0.0を捨てて3.1か3.2に移行する予定。