vs2013 + win8.1 + cuda8.0 手工編譯 opencv2.4.9

1. 前言

  1. 由於opencv 默認編譯的庫文件中是不支持gpu功能的, 爲了開啓gpu 功能, 需要我們手工編譯opencv
  2. 編譯過程真的都是淚啊!!!

2. 基本環境

  1. cuda 8.0 https://developer.nvidia.com/cuda-toolkit
    這裏寫圖片描述
  2. windows 8.1
    這裏寫圖片描述
  3. cmake 3.7.2 https://cmake.org/download/
    這裏寫圖片描述
  4. opencv 2.4.9 http://opencv.org/downloads.html
  5. intel tbb https://developer.nvidia.com/cuda-toolkit

3. 配置cmake

這裏寫圖片描述
1. 編譯器選擇 ‘Visual Studio 12 2013 Win64′
2. 選上 ‘WITH_CUBLAS’, ‘WITH_CUDA’, ‘WITH_OPENGL’, ‘WITH_TBB’
2. 配置cuda 選項
3. 取消 CUDA_ATTACH_VS_BUILD_RULE_TO_CUDA_FILE’
4. 查詢自己顯卡的架構, 設置合適的CUDA_GENERATION
這裏寫圖片描述
5. 由於我們的電腦版本是Thinkpad T420i 很老的機子了。。。。查看顯示器可知, 這是nvidia nvs 4200M
6. 然後需要知道nvdia是否支持 http://blog.csdn.net/bendanban/article/details/7595963
這裏寫圖片描述
6. 查詢 GPU 架構 http://www.notebookcheck.net/NVIDIA-NVS-4200M.47343.0.html
相關 GPU 架構之間的區別: http://www.cnblogs.com/1024incn/p/4539754.html
最直觀的區別是: Fermi 編譯的時候是 compute_2x, Kelper 是 compute_3x, Auto 是 compute_1x (這個是編譯不同過的)
這裏寫圖片描述
7. 相應的錯誤: Unsupported gpu architecture ‘compute_11’解決方法http://blog.csdn.net/langb2014/article/details/51658744
http://blog.csdn.net/wang4959520/article/details/51392804

  1. 然後點擊 configure 刷新配置, 並設置相應的tbb
    • 把 tbb include path 設置好,例如我的是 “D:\toolkits\tbb43_20140724oss\include”。一定要選到 include文件夾爲止。
    • 點擊 Configure 刷新
    • 接着可以看到 tbb 的 library 目錄自動有了,但是可能是錯的,需要改到 Debug 和 Release 文件夾的上級目錄爲止。例如我的要加上 ‘vc12*,變成 D:/toolkits/tbb43_20140724oss/lib/intel64/vc12〃(不加vc12的話,opencv_core模塊都編譯不過去,其他的就不用說了)
      點擊 Configure 刷新

3. 編譯Opencv.sln

3.1 基本操作

右鍵點擊 ALL_BUILD,在點 BUILD
- BUILD 之後在編譯一下 INSTALL,來把編譯好的文件放在一起到 \install
- 在切換到 Release,重複 ALL_BUILDINSTALL
- Debug 應該會有一個 error
這裏寫圖片描述
這個錯誤是因爲我們默認安裝的python 是不提供這個文件的, 如果需要可以手工編譯下, 這裏我們忽略這個錯誤
- Release 應該會沒有 error

最後將 install 中的文件就是我們編譯生成的文件了
這裏寫圖片描述

3.2 遇到的一些bug

  1. NVC.cu, 編譯這個文件的時候(gpu 模塊)報std 沒有max min 成員, 添加一個algorithm 頭文件即可
    這裏寫圖片描述
  2. SURF_GPU 未聲明的標識符 這是因爲opencv2.4.x 中, 將sift, surf 特徵算子都移動到了non_free 中, 修改下頭文件包含路徑即可
    http://blog.csdn.net/holybin/article/details/41144705
    這裏寫圖片描述
  3. HANDLE 未標識, 加入 windows.h 即可
    這裏寫圖片描述
  4. cudalegacy not compile – nppiGraphcut missing
    http://answers.opencv.org/question/95148/cudalegacy-not-compile-nppigraphcut-missing/
  5. 編譯器堆空間不足, 清理下多餘的應用, 最好只讓vs 單獨跑

4. 參考文章

http://blog.csdn.net/lanbing510/article/details/41211697

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章