也真够折腾的。
事件背景:为了一个光流的提取处理,本来是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模块调用的问题。