也真夠折騰的。
事件背景:為了一個光流的提取處理,本來是3.1的opencv在include一些模塊上出錯,原因是opencv3.0以上的版本對模塊進行了再分離,要contribute,但是contribute后還是解決不了,所以,選了2.4.11(因為之前在Windows下用過,知道哪些函數能調用).
這時在make的時候出現了類似nvcc warning : 的問題,然后就按照(http://blog.csdn.net/wang4959520/article/details/51392804)或者在cmake時加上參數-D BUILD_opencv_gpu=OFF,以為能成功了,可是又有 error: ‘NppiGraphcutState’ 類似的錯誤,這時,找到http://blog.csdn.net/caozhantao/article/details/51479172這篇博客,按它的說法,卸載2.4.11,改用2.4.13,在cmake的時候,用了
cmake -D CMAKE_BUILD_TYPE=RELEASE -D BUILD_opencv_gpu=OFF -D CMAKE_INSTALL_PREFIX=/usr/local ..
這下,都圓滿編譯通過了,而且nonfree等頭文件也能include成功了。
但是在調用gpu頭文件的時候又報錯說沒有#include <opencv2/gpu/gpu.hpp>,好吧,只能又重新編譯,又按照http://www.cnblogs.com/CarryPotMan/p/5377921.html這個博客重新對2.3.13編譯一遍,還是沒解決。
最后想到可能是cuda不支持,就決定卸掉2.4.12,用2.4.12,還是按這個博客,編譯,還是不行,好吧,結合了http://blog.csdn.net/xuezhisdc/article/details/48691797和http://blog.csdn.net/allyli0022/article/details/62859290來,用了:
CMAKE_INSTALL_PREFIX=/usr/local -D WITH_CUDA=ON -D WITH_TBB=ON -D BUILD_NEW_PYTHON_SUPPORT=ON -D WITH_V4L=ON -D INSTALL_C_EXAMPLES=ON -D INSTALL_PYTHON_EXAMPLES=ON -D BUILD_EXAMPLES=ON -D WITH_QT=ON -D WITH_OPENGL=ON -D ENABLE_FAST_MATH=1 -D CUDA_FAST_MATH=1 -D WITH_CUBLAS=1 -D CUDA_GENERATION=Fermi ..
並且將graphcuts.cpp中
將 #if !defined (HAVE_CUDA) || defined (CUDA_DISABLER)
改為
#if !defined (HAVE_CUDA) || defined (CUDA_DISABLER) || (CUDART_VERSION >= 8000)
最后就解決了gpu模塊調用的問題。
-----------------------------------------17年5月4號-------------------------------------------------
后來,又一次編譯,為了解決:
OpenCV Error: Gpu API call (invalid device function) in call_resize_linear_glob, file /home/dog/opencv-2.4.12/modules/gpu/src/cuda/resize.cu, line 233
terminate called after throwing an instance of 'cv::Exception'
what(): /home/dog/opencv-2.4.12/modules/gpu/src/cuda/resize.cu:233: error: (-217) invalid device function in function call_resize_linear_glob
Aborted (core dumped)
根據:https://github.com/opencv/opencv/issues/6580 和 https://github.com/opencv/opencv/issues/6577 最終確定用了:
cmake -D CMAKE_BUILD_TYPE=RELEASE -D CMAKE_INSTALL_PREFIX=/usr/local -DCUDA_CUDA_LIBRARY=/usr/local/cuda/lib64/stubs/libcuda.so -D CUDA_ARCH_BIN=5.2 -D CUDA_ARCH_PTX="" -D WITH_CUDA=ON -D WITH_TBB=ON -D BUILD_NEW_PYTHON_SUPPORT=ON -D WITH_V4L=ON -D INSTALL_C_EXAMPLES=ON -D INSTALL_PYTHON_EXAMPLES=ON -D BUILD_EXAMPLES=ON -D WITH_QT=ON -D WITH_OPENGL=ON -D ENABLE_FAST_MATH=1 -D CUDA_FAST_MATH=1 -D WITH_CUBLAS=1 -D WITH_NVCUVID:BOOL="1" .
這里的5 2是這樣確定的:
根據:http://www.centoscn.com/CentOS/help/2015/0307/4816.html 用命令:
# nvidia-smi
得到我的GPU是:Tesla M40
然后在:https://developer.nvidia.com/cuda-gpus 中查找,發現:
Tesla Workstation Products
GPU | Compute Capability |
---|---|
Tesla K80 | 3.7 |
Tesla K40 | 3.5 |
Tesla K20 | 3.5 |
Tesla C2075 | 2.0 |
Tesla C2050/C2070 | 2.0 |
Tesla Data Center Products
GPU | Compute Capability |
---|---|
Tesla P100 | 6.0 |
Tesla P40 | 6.1 |
Tesla P4 | 6.1 |
Tesla M60 | 5.2 |
Tesla M40 | 5.2 |
Tesla K80 | 3.7 |
Tesla K40 | 3.5 |
Tesla K20 | 3.5 |
Tesla K10 | 3.0 |
然后,就成功啦。
opencv最后還要:make -j8 和 sudo make install 不要忘了啊!