经过多次惨痛经验之后,还是要记录一下来让自己下次能够安稳一点地直接按照自己的教程来,不用搜各种博客了:
1、cuda8.0的安装,根据官方的.run来进行安装,so easy
2、重头戏是关于opencv2.4.9的安装,因为安装cuda之后,如果在opencv2.4.9cmake的时候不把cuda关掉,是会进行和cuda相关的文件的编译的,所以在不关掉cuda的情况下的编译如下:
cmake -D CMAKE_BUILD_TYPE=Release -D CMAKE_INSTALL_PREFIX=/usr/local -D BUILD_TIFF=ON -D BUILD_EXAMPLES=ON -D CUDA_GENERATION=Auto -D BUILD_NEW_PYTHON_SUPPORT=ON ..
反正按照普通的
cmake -D CMAKE_INSTALL_PREFIX=/usr/local .. #这样来是不行的,反正是经验得知。我也不知道为啥。
因为可能会出现这个问题:
nvcc fatal : Unsupported gpu architecture 'compute_11'
然后按照上述cmake完后,再make后,可能会遇到如下问题:(然后就要一步步解决)
当遇到这个问题:
CMake Error at cuda_compile_generated_NCVPyramid.cu.o.cmake:266 (message):
Error generating file
/home/dong/opencv2.4.9/build/modules/gpu/CMakeFiles/cuda_compile.dir/src/nvidia/core/./cuda_compile_generated_NCVPyramid.cu.o
这个时候需要用到另外一个文件了:需要下载NCVPixelOperations.hpp替换掉opencv2.4.9内的文件, 重新build。
NCVPixelOperations.hpp 所在目录为:
/modules/gpu/src/nvidia/core (当然,也可以在opencv文件夹里面搜索一下)
文件链接:
再编译后:
当遇到这个错误
/home/dong/文档/opencv-2.4.9/modules/gpu/src/graphcuts.cpp:120:54: error: ‘NppiGraphcutState’ has not been declared
typedef NppStatus (*init_func_t)(NppiSize oSize, NppiGraphcutState** ppState, Npp8u* pDeviceMem);
那就要这样:
在graphcuts.cpp(这个也可以在opencv文件夹中搜索一下)中将
if !defined (HAVE_CUDA) || defined (CUDA_DISABLER)
改为
if !defined (HAVE_CUDA) || defined (CUDA_DISABLER) || (CUDART_VERSION >= 8000)
然后接着make一下就这样神奇的完成了编译,顿时手舞足蹈了!!!
good luck!
参考博客:https://blog.csdn.net/hongbin_xu/article/details/75807940
https://www.cnblogs.com/jessezeng/p/7018267.html
https://blog.csdn.net/sysuwuhongpeng/article/details/45485719
https://blog.csdn.net/gongxs7/article/details/49131201 very important