OpenCV 2.1 on VC++ 2010 Express で映像を読み込めないわけと対応策の例
読み込めないわけ
さて,映像ファイルを読み込めない - BiBoLoG で映像を読み込めないことを挙げた.VC++ 2010 のメジャーバージョン番号は10であるにも関わらす,9のライブラリを読み込もうとするコードが問題だった.ソースを msvcr90 で検索すれば ffopencv.cpp に行き当たる.
- 「_MSC_VER >= 1500」のとき「#pragma comment(lib, "libmsvcr90d_.a")」している
- libmsvcr100d_.a という文字列は影も形もない
こういうわけで,Visual Studio 2010 では無理なんだ.
読み込める版は,リビジョンは?
この問題が対処されたのはリビジョン3029.Diff of /trunk/opencv/interfaces/ffopencv/ffopencv.cpp を確認しよう.ごっそり削られて「extern "C" { __declspec(dllexport) unsigned int __lc_codepage = 0; }」が追加されている.SVN コメントには
fix the problem with various versions of MSVCRT* in opencv_ffmpeg (ticket #286)
とあって,これが今回探していた「問題が対処されたリビジョン」の変更境界だと分かる.
確認
リビジョン選択
タートスSVNでリビジョングラフを見て,r3110 を選んだ.表示されるリビジョン番号の表示がどういう基準かは知らない.OpenCV 2.1 が r2995 相当らしいから,これより後で,かつ,r3029 以降を探すと r3110 だった.
docs\html\html\html\html\html\html\html\html\html\html\html\html\html\html\... と延々掘る OpenCV ビルドに注意
CMake を操作するとき,BUILD_DOXYGEN_DOCS のチェックを外して対応する.外さないままどうなるかは,各自が試して確認すればよいと思うから,記述を省略する.PC が壊れるわけじゃないし.
ファイル構成の違いに注意
OpenCV 2.2 へ向けて,ファイル構成が一変している.Momma's Wiki OpenCV/SVN版/従来のヘッダの廃止 - include/opencv/cv.h等の従来使われてきたヘッダの廃止 モ... にまとめられている.OpenCV ビルド後,どのライブラリをリンクするか,よく考える.
OpenCVr3110debug.props を作った.
<?xml version="1.0" encoding="utf-8"?> <Project ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003"> <ImportGroup Label="PropertySheets" /> <PropertyGroup Label="UserMacros" /> <PropertyGroup /> <ItemDefinitionGroup> <ClCompile> <AdditionalIncludeDirectories>C:\Software\Develop\opencvlibrary\OpenCV2.1\include</AdditionalIncludeDirectories> </ClCompile> <Link> <AdditionalLibraryDirectories>C:\Software\Develop\opencvlibrary\OpenCV2.1\lib</AdditionalLibraryDirectories> <AdditionalDependencies>cxcore210d.lib;highgui210d.lib;cv210d.lib;%(AdditionalDependencies)</AdditionalDependencies> </Link> </ItemDefinitionGroup> <ItemGroup /> </Project>
結果
うまくいった.対策としては「r3110 以降の SVN ソースを入手してビルドしろよ」.