记录VS2015编译cuda11+opencv库遇到的问题

news/2024/10/30 17:27:01/

上片博客是具体的配置教程,本篇升级了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<type, 1>, assign_row<type, 2>, assign_row<type, 3>, assign_row<type, 4>}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

ok编译成功

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时好多都不用勾选的,我也不懂那些都是啥,可能编译了一些没用的东西占用时间,最后反正我只要我需要的就行了


2023.1.29更新笔记

一、vs2015不支持cuda11.3,支持cuda11.1,cuda11.2不确定

二、cuda11.1编译opencv320,cmake中CUDA_ARCH_BIN最高支持到6.1,再高的话编译OpenCV.sln会报错:identifier "__shfl_down" is undefined,怀疑是opencv本版过低

三、我的显卡是RTX A4000,对应算力8.6,故升级opencv版本到4.4.0,再将CUDA_ARCH_BIN改成8.6可成功编译

四、 显卡算力查找网址:CUDA GPUs - Compute Capability | NVIDIA Developer

公司常用的:RTX 1080->6.1,P4000->6.1,30系是8.6,20系是7.0,7.5,MX250->6.1,GTX 940M->5.0 

五、显卡对应算力和cuda支持算力的匹配规则: 

参考:NVIDIA Ampere GPU Architecture Compatibility

意思是说,显卡GPU对应算力要大于cuda版本支持的最高算力,注意是在同一主版本号上作比较

硬件才是最终限制
因此我编译的opencv库要兼容各种显卡,那么CUDA_ARCH_BIN就都写上,注意3.0已被30系显卡废弃,写上会报错

六、查看本机显卡算力的方法:

cmd控制台,进入C:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v8.0\extras\demo_suite目录下,运行deviceQuery.exe会显示如下图

 七、cmake生成opencv库时,把BUILD_opencv_world打勾,这样其它库会合成一个opecv_world.lib和opencv_world.dll,再拷贝时方便一些

八、 cuda目录C:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v8.0\bin下也有一些dll,软件发布时会依赖,将用到的都打包到软件包里,比如cudart64_80,cufft64_80,nppi64_80,nppc64_80,npps64_80等,以免出现软件缺库、崩掉等问题

九、 vs2015+cuda11.1+opencv440编译opencv.sln时,会报以下的warning,导致编译很慢

        1.vs版本过低,要我升级到2017/2019

        2.cuda的thrust库也需要2017及以上版本

更换成cuda11.0就没有warning


http://www.ppmy.cn/news/271535.html

相关文章

linux php连接mysql权限不够_PHP LINUX APACHE MYSQL权限挣扎

拿到了站大概看了一下.PHP LINUX APACHE MYSQL组成.貌似还有一处用了一个让我无法决定的数据库.首先我们从 整个站的结构开始了解. 拿出WWWSCAN 由于我经常检测国外的站我收集了很多敏感的目录文件等等 当然软件作者 也收集了许多有用的.结果返回大概目录有 /admin/ /config/ /…

中国黑客常用的八种工具及其防御方法(转)

您是怎样看待黑客及黑客现象的?崇拜?不齿?还是畏惧?本文将向您介绍中国黑客常用的八种工具及其防御方法。需要说明的是&#xff0c;这些只是初级黑客、甚至是不算黑客的“黑客”所使用的工具。在真正的黑客看来这些工具是很初级的&#xff0c;但这些黑客工具对我们普通用户…

一个程序员的黑客梦

张大胖上大学的时候就对网络安全非常感兴趣&#xff0c; 经常上网去搜索那些传奇的黑客故事&#xff0c;然后心里痒痒的想小试牛刀。 那个时候大家的安全意识非常薄弱&#xff0c;张大胖学会了SQL注入以后&#xff0c;居然用它获得了一个BBS网站的用户列表&#xff0c;并且包括…

菜鸟进阶黑客知识整合大全(2)

学习黑客的基本环境 一、操作系统的选择&#xff1a; 我们经常听说黑客酷爱Linux系统&#xff0c;这是因为Linux相对Windows提供了更加灵活的操作方式&#xff0c;更加强大的功能。例如对于IP地址的伪造工作&#xff0c;利用Linux系统编写特殊的IP头信息可以轻松完成&#…

王者风范 2分钟入侵网站全程实录(转)

王者风范 2分钟入侵网站全程实录(转)[more]  说起流光、溯雪、乱刀&#xff0c;可以说是大名鼎鼎无人不知无人不晓&#xff0c;这些都是小榕哥的作品。每次一提起小榕哥来&#xff0c;我的崇拜景仰就如滔滔江水&#xff0c;连绵不绝~~~~&#xff08;又来了&#xff01;&#…

东子破解2

我们今天讲的是bash&#xff1a; 今天是最有用的。 ls /bin/.sh 可以看到我们要看到的 所有的shell strace ls(命令) 查看各种命令的api ksh 。。。ibm 公司的shell aix系统的 bash的内部命令which echo $APTH echo $PATH 放到 path中的命令是外部命令 man bash 查看外部…

新手常见安全问题

关于被入侵 简单说明&#xff1a; 经常有说&#xff1a;“我中xx木马啦&#xff0c;怎么办&#xff1f;”、“我的windows有问题&#xff0c;是不是被入侵啦&#xff1f;”等等。通用的做法是查看可疑进程&#xff08;win98需要用相关工具&#xff09;、注册表启动项、服务、开…