上片博客是具体的配置教程,本篇升级了cuda11版本,然后记录遇到的问题及解决方法
最近公司买来了新的30系显卡(3080ti),搜了下30系显卡架构变了,必须装cuda11版本
参考:
30 系列显卡是新一代架构,新驱动不支持 cuda 9 以及 cuda 10,所以必须安装 cuda 11_kyle-fang的博客-CSDN博客_cuda版本11一定要安装11吗
装了cuda11,还是配置opencv3.2.0+cmake3.18,可以成功Configure,但是Generate一直报错如下:
CMake Error: The following variables are used in this project, but they are set to NOTFOUND.
Please set them or make sure they are set and tested correctly in the CMake files:
CUDA_nppicom_LIBRARY (ADVANCED)
搜了搜,说是cuda11不支持nppicom了,然后我就去修改cmake下的FindCUDA.cmake了,参考:CUDA 11.x CMAKE Error CUDA_nppi_LIBRARY (ADVANCED)_溯雪pro的博客-CSDN博客_cuda 11.x发现没用
然后又参考了一些博客的方法:
1.参考CMAKE ERROR: CUDA_nppicom_LIBRARY (ADVANCED)_ipanda_zll的博客-CSDN博客
这位老哥是直接把cuda版本降到cuda10
我尝试按照他写的又升级了cmake到最新版cmake3.25,发现没用
2.参考CMake Error: CUDA_nppi_LIBRARY (ADVANCED)_dawn_chen123的博客-CSDN博客_cuda_nppi_library
这个他写的那一句我不知道在哪里加,因为我是win10
3. 看了一些Stack Overflow上面的回答
Build OpenCV-4.0.0 with cuda 11 on Ubuntu 18.04 - Stack Overflow
最终参考:Ubuntu18.04+CUDA11.2+opencv4.3.0:CUDA_nppicom_LIBRARY (ADVANCED)报错解决_NENGSHUIYIZHOU的博客-CSDN博客_cuda_nppicom_library
我把opencv版本提高到了opencv4.4.0,问题解决了 (cmake3.25+cuda11.0+opencv4.4.0编译成功)
接下来编译opencv.sln遇到的问题
问题一:“错误 C2131 表达式的计算结果不是常数”。解决方法:在错误列表中找到该错误第一行行,会自动定位到\gapi\own\mat.hpp
文件中的一行,如下:
#define TABLE_ENTRY(type) {assign_row, assign_row, assign_row, assign_row}
static constexpr func_p_t func_tbl[][max_channels] = {
TABLE_ENTRY(uchar),
TABLE_ENTRY(schar),
TABLE_ENTRY(ushort),
TABLE_ENTRY(short),
TABLE_ENTRY(int),
TABLE_ENTRY(float),
TABLE_ENTRY(double)
};
将static constexpr
中的constexpr改为const,成功编译,参考:VS2015+CMake+opencv4.1+opencv_contrib4.1编译方法及出现的问题_Natsume_Kagura的博客-CSDN博客
问题二:
这些我记得之前编译opencv320的时候有了呀,4.4.0的目录里没有了
参考:【OpenCV】编译opencv_contrib模块_CA727的博客-CSDN博客_无法打开包括文件: “vgg_generated_120.i”: no
可以下载下来,我是去opencv320里粘贴过来的
问题三:编译ade报错
这什么鬼?在cmake时直接把它的勾去掉,除此之外把一些test也都去掉重新configure和generate
But
我还是想编opencv3.2,因为公司软件架构就是3.2.0的,我一想是因为opencv版本到4.4.0以后才解决的 CUDA_nppicom_LIBRARY (ADVANCED) 的问题,那改cmake的FindCUDA没用的话就去找opencv目录里的cmake了,发现FindCUDA.cmake其实差不多。我又找带cuda的cmake文件,我去,重大发现,OpenCVDetectCUDA.cmake文件里果然又出入
左边是opencv320,右边是opencv440,还是cuda11不支持nppicom的原因,我把右边红框添加到左边,重新generate,问题解决了!
当然了,编译opencv.sln时自然也少不了报错,就这么难,特么的
问题一:
诶,这不和上一篇的问题四一样吗,那个是cuda10不支持2.0架构,把CUDA_ARCH_BIN里的2.0删了,那这回把3.0也删了
其实cuda11支持30显卡,CUDA_ARCH_BIN那应该是8.6起步,我看cmake最新版也没到8.6,那么编译时就会遇到很多warnning,耽误时间
参考【问题解决】安装PCL报错:nvcc fatal : Unsupported gpu architecture ‘compute_30‘_ghgou的博客-CSDN博客_cuda_arch_bin
计算架构说的就是Compute Capability
ok,大功告成
返回过头来看看,其实cmake时好多都不用勾选的,我也不懂那些都是啥,可能编译了一些没用的东西占用时间,最后反正我只要我需要的就行了