OpenCVプログラムをDebugモードでビルド,実行すると「MSVCR80.dll」が見つからないと怒られる件について

OpenCVを利用したプログラムにDebug版のライブラリhighguid.libを依存ファイルに追加して,
Debugモードでビルド,実行すると「MSVCR80.dll」が見つからない!!と怒られました。。。

なんでだろーと思って探してみると,公式のバグ報告にて既に報告されているみたいです.
書き込みによると,CVS版では解決しているらしいですが,CVS版をダウンロードして検証する
気力が残っていないので,javencaoさんの書き込みを参考に自力でなんとかしてみることにします.

ということで,以下に行った手順を示します.
※ある程度知識を有する、かつ人柱上等の人向けです(必ず最後まで読んでから判断してください).
初心者の方には激しく非推奨.

続きを読む方は下のリンクをクリックしてください.

①C:\Program Files\OpenCV\otherlibs\_graphics\src にあるgraphic_libs.slnを開き,
libjpeg,libpng,libtiff,zlibプロジェクトを[Debug|Win32]でビルド.
ビルドが正常に完了したら,C:\Program Files\OpenCV\otherlibs\_graphics\lib に
libjpegd.lib,libpngd.lib,libtiffd.lib,zlibd.libができているはず.

②C:\Program Files\OpenCV\_make にあるopencv.slnを開き,ソリューションエクスプローラ中の
highguiを右クリックして,プロパティを選択.すると,highguiプロパティページが表示されるので,
構成を[Debug]にして,構成プロパティの[リンカ]-[入力]-[追加の依存ファイル]を以下のように変更.
左:変更前右:変更後

libjpeg.lib → libjpegd.lib
libpng.lib → libpngd.lib
libtiff.lib → libtiffd.lib
zlib.lib → zlibd.lib

以上の設定が終わったら,highguiプロジェクトをDebugモードでリビルド.
C:\Program Files\OpenCV\binに生成されたhighgui100d.dllをsystem32にコピー.これでOKのはず.
※他の依存ファイルlibjasper.libの扱いがまだよくわかっていませんが,これは追々調べよう。。。(多分)

とりあえず自分の環境ではこれで動きましたが,ご指摘等ありましたらお願いします.

************************************************************************
【追記】
libjasper.libはJPEG 2000を扱うためのライブラリみたい.
普通にインストールした状態だと,libjasperのソースが入ってないのでDebug版のライブラリは生成できません.
ただし,CVS版では含まれているみたいなので後日持ってきて実験してみようかなと.

************************************************************************
【追記②:2008/05/23】
CVS版でlibjasperのプロジェクトが追加されているので,Debug版のライブラリlibjasperd.libが生成できます.
とりあえず,今回はOpenCV\otherlibsにある_graphics以下をCVS版と差し替えることにしました.
libjasperd.libが生成できたら,highguiプロジェクト(構成はDebug)の依存ファイルを
libjasper.lib → libjasperd.lib
に変更し,highguiプロジェクトをDebugモードでリビルド.
C:\Program Files\OpenCV\binに生成されたhighgui100d.dllをsystem32にコピー.
これでJPEG 2000を扱うぶんにはOKです.

・・・と含みのある言い方をしたのは,OpenCV 1.0からOpenEXRフォーマットをサポートしていますが,
このままだと,OpenEXR を有効にして,OpenEXRフォーマットの画像を扱う場合に問題が起こるからです.
(デフォルトでは無効になっているようです)

C:\Program Files\OpenCV\otherlibs\_graphics にあるreadme.txtに有効にする方法が
書いてありますので,興味のある猛者は試してみても良いかもしれません.
(注意)_graphics以下をCVS版と差し替える作業を今回とっているので若干やることが異なります.

ただ,readme.txtに書いてある作業を行っても,
①OpenEXRを有効にした状態
②highguid.libを依存ファイルに追加
③Debugモードで生成したプログラム中でOpenEXRフォーマットの画像を扱う
という条件が揃うとプログラムが落ちるという罠が潜んでいたりします.

なんとか問題の箇所を特定して動作するところまで持ってきましたが,ここで対処法を書くのは大変そうなので,
このエントリではここまでにしときます.とりあえず,公式にバグ報告しといた方がいいかな.
まぁ,OpenEXRフォーマットを扱う需要そんなに無いだろうけど。。。

ということで,ここまでOpenCVのソース潜ったの初めてかもしれない(←だいぶ投げそうになった人).
とりあえず,OpenEXRファイル表示プログラムの記念スクリーンショット!!
(原画像が大きいので縮小してウィンドウ表示してます)

OpenEXR表示プログラム

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です