[OpenCV]Win7 x64+VC10+OpenCV2.4.5+CUDA5.0+TBBのスタティックリンク

OpenCV 2.4.5をダウンロードするとx64のスタティックのライブラリも入っているので通常使う分にはなんら問題がない。
しかしCUDAを含んだものをスタティックリンクしたいとかいうことになるとOpenCVをビルドしなければならない。
2.4.4にはCUDAでコンパイルしたものがあがっているがこれもDLL版のみである。

ビルド方法は以下のとおり

1.CUDA Toolkitをダウンロードしてインストール
 cuda_5.0.35_winvista_win7_win8_general_64-3.msiを使用した

2.pythonをダウンロードしてインストール
python-2.7.4.amd64.msiを使用した

3.TBBをダウンロードして展開
tbb41_20130314oss_win.zipを使用した

4.OpenCVをダウンロードして展開
OpenCV-2.4.5.exeを使用した

5.cmakeをダウンロードしてインストール
cmake-2.8.10.2-win32-x86.zipを使用した

cmake-gui.exeを起動して、source codeにOpenCVのディレクトリとbuild the binaliesにOpenCV/buildを指定。
この辺はググッてもらえばたいていどこも同じやり方が書いてある。
スタティックに関してはBUILD_SHAREDLIBS,BUILD_WITH_STATIC_CRTでいい。
pythonやCUDAは勝手に認識するはず。

問題はTBBだ。
散々やり直したが、WITH_TBBはチェックしてもよいがBUILD_TBBにチェックしないこと。これが大事。
BUILD_TBBをすると勝手にダウンロードしてきてその場所が指定される。
これだけなら問題ないがこのままコンパイルするとTBBのプロジェクトがエラーになる。(VC11からのstd::threadが使われる。これってちゃんとWin用になってるのか?)そもそもTBBのプロジェクトなどいらない。

WITH_TBBだけだとTBB_LIB_DIR設定が出てくる。
TBB_INCLUDE_DIR,TBB_STDDEF_PATHをふつうに指定すればよい。
TBBはダイナミックリンクされるので、binにあるtbb_debug.dllやtbb.dllを使うことになる。

CUDA detected: 5.0
CUDA NVCC target flags: -gencode;arch=compute_11,code=sm_11;-gencode;arch=compute_12,code=sm_12;-gencode;arch=compute_13,code=sm_13;-gencode;arch=compute_20,code=sm_20;-gencode;arch=compute_20,code=sm_21;-gencode;arch=compute_30,code=sm_30;-gencode;arch=compute_20,code=compute_20;-gencode;arch=compute_30,code=compute_30

General configuration for OpenCV 2.4.5 =====================================
  Version control:               unknown

  Platform:
    Host:                        Windows 6.1 x86
    CMake:                       2.8.10.2
    CMake generator:             Visual Studio 10 Win64
    CMake build tool:            D:/App/MICROS~2.0/Common7/IDE/devenv.com
    MSVC:                        1600

  C/C++:
    Built as dynamic libs?:      NO
    C++ Compiler:                D:/App/Microsoft Visual Studio 10.0/VC/bin/x86_amd64/cl.exe  (ver 16.0.40219.1)
    C++ flags (Release):         /DWIN32 /D_WINDOWS /W4  /GR /EHa  /D _CRT_SECURE_NO_DEPRECATE /D _CRT_NONSTDC_NO_DEPRECATE /D _SCL_SECURE_NO_WARNINGS /Gy /bigobj /Oi  /wd4251 /MT /O2 /Ob2 /D NDEBUG  /Zi
    C++ flags (Debug):           /DWIN32 /D_WINDOWS /W4  /GR /EHa  /D _CRT_SECURE_NO_DEPRECATE /D _CRT_NONSTDC_NO_DEPRECATE /D _SCL_SECURE_NO_WARNINGS /Gy /bigobj /Oi  /wd4251 /D_DEBUG /MTd /Zi /Ob0 /Od /RTC1 
    C Compiler:                  D:/App/Microsoft Visual Studio 10.0/VC/bin/x86_amd64/cl.exe
    C flags (Release):           /DWIN32 /D_WINDOWS /W3   /D _CRT_SECURE_NO_DEPRECATE /D _CRT_NONSTDC_NO_DEPRECATE /D _SCL_SECURE_NO_WARNINGS /Gy /bigobj /Oi  /MT /O2 /Ob2 /D NDEBUG  /Zi
    C flags (Debug):             /DWIN32 /D_WINDOWS /W3   /D _CRT_SECURE_NO_DEPRECATE /D _CRT_NONSTDC_NO_DEPRECATE /D _SCL_SECURE_NO_WARNINGS /Gy /bigobj /Oi  /D_DEBUG /MTd /Zi /Ob0 /Od /RTC1 
    Linker flags (Release):      /STACK:10000000 /machine:x64   /NODEFAULTLIB:atlthunk.lib /NODEFAULTLIB:msvcrt.lib /NODEFAULTLIB:msvcrtd.lib /INCREMENTAL:NO  /debug /NODEFAULTLIB:libcmtd.lib
    Linker flags (Debug):        /STACK:10000000 /machine:x64   /NODEFAULTLIB:atlthunk.lib /NODEFAULTLIB:msvcrt.lib /NODEFAULTLIB:msvcrtd.lib /debug /INCREMENTAL  /NODEFAULTLIB:libcmt.lib
    Precompiled headers:         YES

  OpenCV modules:
    To be built:                 core imgproc flann highgui features2d calib3d ml video objdetect contrib photo legacy gpu ocl nonfree stitching superres ts videostab
    Disabled:                    world
    Disabled by dependency:      -
    Unavailable:                 androidcamera java python

  GUI: 
    QT 4.x:                      NO
    Win32 UI:                    YES
    OpenGL support:              NO

  Media I/O: 
    ZLib:                        build (ver 1.2.7)
    JPEG:                        build (ver 62)
    PNG:                         build (ver 1.5.12)
    TIFF:                        build (ver 42 - 4.0.2)
    JPEG 2000:                   build (ver 1.900.1)
    OpenEXR:                     build (ver 1.7.1)

  Video I/O:
    Video for Windows:           YES
    FFMPEG:                      YES (prebuilt binaries)
      codec:                     YES (ver 53.61.100)
      format:                    YES (ver 53.32.100)
      util:                      YES (ver 51.35.100)
      swscale:                   YES (ver 2.1.100)
      gentoo-style:              YES
    OpenNI:                      NO
    OpenNI PrimeSensor Modules:  NO
    PvAPI:                       NO
    GigEVisionSDK:               NO
    DirectShow:                  YES
    Media Foundation:            NO
    XIMEA:                       NO

  Other third-party libraries:
    Use IPP:                     NO
    Use Eigen:                   NO
    Use TBB:                     YES (ver 4.1 interface 6103)
    Use OpenMP:                  NO
    Use GCD                      NO
    Use Concurrency              NO
    Use C=:                      NO
    Use Cuda:                    YES (ver 5.0)
    Use OpenCL:                  YES

  NVIDIA CUDA
    Use CUFFT:                   YES
    Use CUBLAS:                  NO
    USE NVCUVID:                 NO
    NVIDIA GPU arch:             11 12 13 20 21 30
    NVIDIA PTX archs:            20 30
    Use fast math:               NO

  OpenCL
    Include path:                D:/App/NVIDIA GPU Computing Toolkit/CUDA/v5.0/include
    libraries:                   D:/App/NVIDIA GPU Computing Toolkit/CUDA/v5.0/lib/x64/OpenCL.lib
    Use AMD FFT:                 NO
    Use AMD BLAS:                NO

  Python:
    Interpreter:                 D:/App/python27/python.exe (ver 2.7.4)

  Java:
    ant:                         NO
    JNI:                         NO
    Java tests:                  NO

  Tests and samples:
    Tests:                       NO
    Performance tests:           YES
    C/C++ Examples:              NO

  Install path:                  G:/opencv/build/install

  cvconfig.h is in:              G:/opencv/build
-----------------------------------------------------------------

Configuring done
Generating done

CMakeTargets extra
ALL_BUILD
以外のプロジェクトすべてのプリプロセッサWIN32をWIN64にして
ALL_BUILDをバッチビルド

Cmake-Automatically reload and build?なんぞ途中で出たりする。これはよくわからないがとりあえずyesにしている。
コンパイルはものすごく時間がかかるので注意(athlon64 x2 2.2GHz,mem 4GBでそれこそ丸一日とか。しかも途中でダイアログが出てたり)
opencv_gpu245は500MB越え。一応出来上がるはず。

これを使うときの注意は
スタティックのときはこのようなライブラリも追加しなければならなかったりするが

#pragma comment(lib,"IlmImfd.lib")
#pragma comment(lib,"libjasperd.lib")
#pragma comment(lib,"libjpegd.lib")
#pragma comment(lib,"libpngd.lib")
#pragma comment(lib,"libtiffd.lib")
#pragma comment(lib,"zlibd.lib")
#pragma comment(lib,"vfw32.lib")

さらにCUDA Toolkitにあるライブラリも追加しないとリンクできない

#pragma comment(lib, "tbb_debug.lib")
#pragma comment(lib, "nvcuvenc.lib")
#pragma comment(lib, "cufft.lib")
#pragma comment(lib, "cudart.lib")
#pragma comment(lib, "cuda.lib")
#pragma comment(lib, "npp.lib")
#pragma comment(lib, "OpenCL.lib")
カテゴリー: VC++, ソフトウェア タグ: ,

関連してるかも記事

この記事へのコメント

※コメントはスパム対策の為、承認制となっています。あらかじめご了承ください。

トラックバックURL