记录VS2015编译cuda11+opencv库遇到的问题
上片博客是具体的配置教程,本篇升级了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库遇到的问题相关推荐
- 02.vs2015编译qt动态库
vs2015编译qt动态库 1 编译动态库 昨天重新使用了一下qt动态库,现对qt动态库现进行重新梳理一下,以便后续查阅. 创建qt库工程 编辑加法库,因为比较直观 编译生成动态库 2调用动态库方法一 ...
- VS2015可以运行opencv库,但不出图片。
1.将VS的运行环境改为x64的(5个openCV库的运行需求),添加引用前四个dll后,分别在相应文件Console_text001\Console_text001\bin的Debug和x64里放入 ...
- vs2015编译 pybind 动态库
本人总结: pyd的文件.引用 module的名字和 pybind定义的module名字一致, PYBIND11_MODULE(pyiotsdk, m) pybind只需要引用头文件即可. 根据原文, ...
- 在Linux下使用树莓派交叉编译工具编译opencv库并进行移植
一.交叉编译opencv 继上一篇博客:"在Linux下配置opencv"之后,我以为直接将编译命令:g++ `pkg-config --cflags opencv` -o Tes ...
- VS2015编译32位Opencv310(动态库+静态库,文末有下载链接)
VS2015编译32位Opencv310(动态库+静态库 编译过得,可以直接用的: http://download.csdn.net/download/longzaihuaxia/9802510 之前 ...
- 超级详细Ubuntu20.04.5系统下编译安装OpenCV with ffmpeg4.2.7、NVIDIA显卡驱动515、cuda11.5、cudnn8.3.3并编译使用darknet-yolov4
这篇文章是本人折腾了两天之后将步骤捋顺然后记录一下.如果你的电脑刚刚装好系统,想要安装显卡驱动.编译安装ffmpeg.编译安装cuda与cudnn.编译安装opencv再或者想要使用darknet-y ...
- [笔记]OpenCV+FFmpeg+Qt实现视频编辑器之OpenCV vs2015编译
参考 文章目录 一.环境 二.cmake构建 2.1 打开cmake-gui 2.2 配置路径 2.3 点击Configure 2.3.1 选择编译器和编译平台 2.4 再点击Configure 2. ...
- Windows10-64bit,vs2015,借助OpenCV、Zbar、Tesseract(编译环境32bit)进行数字、条形码识别。
此次博客介绍了如何在vs2015上配置opencv.zbar.tesseract,也是为了给即将进行条形码识别工作的工程师所准备. 本次提供的代码是在32bit的编译环境下完成的. 主要内容包括:所需 ...
- windows 下 vs2008 编译 OpenCV 库
1. 下载 opencv-2.4.9.exe 下面地址可以用迅雷: http://downloads.sourceforge.net/project/opencvlibrary/opencv-win ...
最新文章
- TensorFlow.js快速入门
- Linux as4开启telnet,Red hat AS4开启telnet过程
- Hadoop搭建集群中输入hdfs namenode -format格式化节点时,提示:hdfs: command not found 解决办法
- 3-5Tensor创建编程实例
- 如何同时让多台服务器安装系统,如何同时安装多台服务器?
- 2022,火山引擎的云上第一“子”,为何是视频?
- MatrixCursor 模拟数据库
- 群体智能算法之蝙蝠算法
- Android shape自定义形状,设置渐变色
- FileNotFoundError: [WinError 3] 系统找不到指定的路径。
- 无线路由器(WIFI)经常掉线断网的可能的原因
- 为什么Java大数据是最火爆的编程语言?
- 参考文献标号字体_论文参考文献文字格式
- 我心中的计算机作文500,我眼中的作文500字
- F1C100S裸奔nes游戏模拟器-f1c100s裸跑-WINDOWS下keil-MDK纯裸跑 回味80后的小幸福
- 自制锂电池主动均衡板与新能源技术,均衡技术及原理
- MYSQL高可用之PXC
- 半次元获取收藏夹下所有的图片
- CSS中p和span有什么区别
- 网上投票作弊的技术实现(纯技术交流,勿用作他途!!) (转)
热门文章
- 投资怕选错房?跟着买房路线图走不亏!
- 51单片机实现电机控制和LCD显示
- Ghost超级技巧一家亲
- 指针和地址之间的关系是什么?
- 3D 空间中拟合曲线
- 浅层神经网络回归预测,基于MATLAB。 模型包括BPNN,极限学习机(ELM)和Elman网络
- gif动图表情包如何制作?教你一键生成gif表情包
- 单片机双字节数乘法运算实验_单片机入门——单片机的基本构成及工作原理(1)...
- 计算机桌面图标怎么显示出来,显示桌面图标不见了怎么办?显示桌面图标不见了解决方法...
- API开发平台,专注API无代码快速发布