上片博客是具体的配置教程,本篇升级了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

记录VS2015编译cuda11+opencv库遇到的问题相关推荐

  1. 02.vs2015编译qt动态库

    vs2015编译qt动态库 1 编译动态库 昨天重新使用了一下qt动态库,现对qt动态库现进行重新梳理一下,以便后续查阅. 创建qt库工程 编辑加法库,因为比较直观 编译生成动态库 2调用动态库方法一 ...

  2. VS2015可以运行opencv库,但不出图片。

    1.将VS的运行环境改为x64的(5个openCV库的运行需求),添加引用前四个dll后,分别在相应文件Console_text001\Console_text001\bin的Debug和x64里放入 ...

  3. vs2015编译 pybind 动态库

    本人总结: pyd的文件.引用 module的名字和 pybind定义的module名字一致, PYBIND11_MODULE(pyiotsdk, m) pybind只需要引用头文件即可. 根据原文, ...

  4. 在Linux下使用树莓派交叉编译工具编译opencv库并进行移植

    一.交叉编译opencv 继上一篇博客:"在Linux下配置opencv"之后,我以为直接将编译命令:g++ `pkg-config --cflags opencv` -o Tes ...

  5. VS2015编译32位Opencv310(动态库+静态库,文末有下载链接)

    VS2015编译32位Opencv310(动态库+静态库 编译过得,可以直接用的: http://download.csdn.net/download/longzaihuaxia/9802510 之前 ...

  6. 超级详细Ubuntu20.04.5系统下编译安装OpenCV with ffmpeg4.2.7、NVIDIA显卡驱动515、cuda11.5、cudnn8.3.3并编译使用darknet-yolov4

    这篇文章是本人折腾了两天之后将步骤捋顺然后记录一下.如果你的电脑刚刚装好系统,想要安装显卡驱动.编译安装ffmpeg.编译安装cuda与cudnn.编译安装opencv再或者想要使用darknet-y ...

  7. [笔记]OpenCV+FFmpeg+Qt实现视频编辑器之OpenCV vs2015编译

    参考 文章目录 一.环境 二.cmake构建 2.1 打开cmake-gui 2.2 配置路径 2.3 点击Configure 2.3.1 选择编译器和编译平台 2.4 再点击Configure 2. ...

  8. Windows10-64bit,vs2015,借助OpenCV、Zbar、Tesseract(编译环境32bit)进行数字、条形码识别。

    此次博客介绍了如何在vs2015上配置opencv.zbar.tesseract,也是为了给即将进行条形码识别工作的工程师所准备. 本次提供的代码是在32bit的编译环境下完成的. 主要内容包括:所需 ...

  9. windows 下 vs2008 编译 OpenCV 库

    1. 下载  opencv-2.4.9.exe 下面地址可以用迅雷: http://downloads.sourceforge.net/project/opencvlibrary/opencv-win ...

最新文章

  1. TensorFlow.js快速入门
  2. Linux as4开启telnet,Red hat AS4开启telnet过程
  3. Hadoop搭建集群中输入hdfs namenode -format格式化节点时,提示:hdfs: command not found 解决办法
  4. 3-5Tensor创建编程实例
  5. 如何同时让多台服务器安装系统,如何同时安装多台服务器?
  6. 2022,火山引擎的云上第一“子”,为何是视频?
  7. MatrixCursor 模拟数据库
  8. 群体智能算法之蝙蝠算法
  9. Android shape自定义形状,设置渐变色
  10. FileNotFoundError: [WinError 3] 系统找不到指定的路径。
  11. 无线路由器(WIFI)经常掉线断网的可能的原因
  12. 为什么Java大数据是最火爆的编程语言?
  13. 参考文献标号字体_论文参考文献文字格式
  14. 我心中的计算机作文500,我眼中的作文500字
  15. F1C100S裸奔nes游戏模拟器-f1c100s裸跑-WINDOWS下keil-MDK纯裸跑 回味80后的小幸福
  16. 自制锂电池主动均衡板与新能源技术,均衡技术及原理
  17. MYSQL高可用之PXC
  18. 半次元获取收藏夹下所有的图片
  19. CSS中p和span有什么区别
  20. 网上投票作弊的技术实现(纯技术交流,勿用作他途!!) (转)

热门文章

  1. 投资怕选错房?跟着买房路线图走不亏!
  2. 51单片机实现电机控制和LCD显示
  3. Ghost超级技巧一家亲
  4. 指针和地址之间的关系是什么?
  5. 3D 空间中拟合曲线
  6. 浅层神经网络回归预测,基于MATLAB。 模型包括BPNN,极限学习机(ELM)和Elman网络
  7. gif动图表情包如何制作?教你一键生成gif表情包
  8. 单片机双字节数乘法运算实验_单片机入门——单片机的基本构成及工作原理(1)...
  9. 计算机桌面图标怎么显示出来,显示桌面图标不见了怎么办?显示桌面图标不见了解决方法...
  10. API开发平台,专注API无代码快速发布