- OpenCV2.4.3をWindowsでビルド。ただ使うだけならOpenCVのインストーラを展開するだけでいいのだが、今回はOpenCLとIntel TBBを動かせるようにするためにビルドを試みた。ハマりどころが多くあるので一筋縄で行かなかった。
- 以下は64ビット版のDLLをVisual Studioでビルドできるようになるまでのメモ。OpenCLとIntel TBBは要らないという人は該当部分は読み飛ばしてください。
準備
- 必要なファイルをダウンロード&インストール
- OpenCV (現時点の最新版 OpenCV-2.4.3.exe) http://sourceforge.net/projects/opencvlibrary/files/opencv-win/2.4.3/
- CMake (現時点の最新版 cmake-2.8.10.2-win32-x86.exe) http://www.cmake.org/cmake/resources/software.html
- インストール
- TBB (現時点の最新版 4.1 Update 1) http://threadingbuildingblocks.org/download
- 適当なところに展開しておく
- ここでは C:\lib\tbb41_20121003oss と展開した
- OpenCL
手順
- OpenCV-2.4.3.exeを実行
- 適当なディレクトリを選んで解凍する。C:\と入力してExtractをクリックすると、C:\直下にopencvフォルダができる
- cmake-guiを実行
- 初期設定
- "Where is the source code: "に解凍したOpenCVのディレクトリのパスを入力(今回はC:/opencv)
- "Where to build the binaries: "にビルド用のソリューションファイルを作るディレクトリのパスを入力(C:/opencv/mybuild)
- Configureをクリック
- "Build directory does not exist, should I create it?"と訊かれるのでYesをクリック
- ツールを選択。ここではVisual Studio 11 Win64を選択してFinishをクリック
- もう一度Configureをクリック
- OpenCLの設定
- TBBの設定
- WITH_TBBにチェックを入れてConfigureをクリック
- TBB-INCLUDE_DIRSという項目が出現。値が"TBB_INCLUDE_DIRS-NOTFOUND"になっているはず。この値をC:\lib\tbb41_20121003oss\includeに変更してConfigureをクリック
- TBB_LIB_DIRという項目と、TBB_STDDEF_PATHという項目とが新たに出現。今回の場合は勝手に値が入っていた。そのままConfigureをクリック
- 初期設定
この時点でこんな感じ。なお、Search欄に"TBB"と入力しているために、TBB関連の項目のみが表示されている。
- ビルド
- 生成されたOpenCV.slnをクリックしてVisual Studioを開き、Ctrl+Shift+Bでビルド開始。しばらく待てばビルド終了。
はまったところその1
ここからは、私がビルドに試行錯誤しているときに出会ったハマりどころの紹介。
最初、OpenCVの展開先のパスの中に'['と']'という文字が入っていた時(C:\somewhere\[library]\opencvみたいな感じでopencvを展開していた)、以下のようなエラーが出て一部のライブラリがビルドできなくてハマった。同じエラーが出る場合は、できるだけシンプルなパスにOpenCVを解答しなおしてやり直すことをお勧めする。
You have called ADD_LIBRARY for library libjpeg without any source files. This typically indicates a problem with your CMakeLists.txt file You have called ADD_LIBRARY for library libjasper without any source files. This typically indicates a problem with your CMakeLists.txt file You have called ADD_LIBRARY for library libpng without any source files. This typically indicates a problem with your CMakeLists.txt file
はまったところその2
TBB-INCLUDE_DIRSの欄に間違ってC:\lib\tbb41_20121003oss\include\tbbと入力してConfigureをクリックしたところ、TBB_STDDEF_PATHがTBB_STDDEF_PATH-NOTFOUNDのままとなり自動設定されなかった。その後手でパス修正しようとしたが、パスのデリミタは円マークではなくスラッシュではなければエラーとなってしまうのに気づかず時間がとられた。
参考までに、パスのデリミタを間違えたときのエラーを下記にコピーしておく。
CMake Error at cmake/OpenCVUtils.cmake:445 (if): Syntax error in cmake code at c:/opencv/cmake/OpenCVUtils.cmake:445 when parsing string C:\lib\tbb41_20121003oss\include\tbb\tbb_stddef.h Invalid escape sequence \l Call Stack (most recent call first): cmake/OpenCVDetectTBB.cmake:85 (ocv_parse_header) cmake/OpenCVFindLibsPerf.cmake:7 (include) CMakeLists.txt:379 (include)
参考
- OpenCVで動画入出力をしてみただけ - とあるPGの研究記録Ⅱ(レコーダー)
- このページを見てTBBのパスのデリミタが間違っていることに気付いた。感謝。