win10_opencv4.2_cuda11_vs2019 编译
查看cuda11支持的vs版本:https://docs.nvidia.com/cuda/cuda-installation-guide-microsoft-windows/index.html
1,安装 visual studio 2019 community 免费版
2,下载安装CUDA Toolkit,https://developer.nvidia.com/cuda-downloads?target_os=Windows&target_arch=x86_64&target_version=10,一种是网络下载安装,一种是独立安装包,建议第二个,可以反复装,而且不会有奇怪错误。
3,下载opencv4.2 source包和扩展包
https://github.com/opencv/opencv/releases/download/4.2.0/opencv-4.2.0-vc14_vc15.exe
https://github.com/opencv/opencv_contrib/archive/4.2.0.zip
4,下载cmake最新版本
cmake-3.18.2-win64-x64
5,解压后,目录有如下:
-D:software
-build_opencv //存放cmake目标文件
-cmake-3.18.2-win64-x64 //cmake安装包位置
-opencv-4.2.0 //opencv4.2源码包
-opencv_contrib-4.2.0 //上面的扩展包 opencv_contrib 加压后放在这里
————第1阶段:配置cmake
6,双击 cmake-3.18.2-win64-x64bincmake-gui.exe 打开cmake界面
7,点击【configure】目标,弹出对话框选择如下:
8,然后点击【Finish】完成config之后,然后找到 OPENCV_EXTRA_MODULES_PATH
设置扩展模块的源代码路径【注意:是下级modules 目录!!!】 ,如下:
9,再configure
10,在搜索框中 WITH_CUDA
,BUILD_CUDA_STUBS
,都打勾,点击【configure】按钮。
11,在搜索框中 CUDA_FAST_MATH
,打勾,再configure。没有错误,完成。
12,点击【generate】按钮,生成项目。
————第2阶段:使用vs生成lib库
这个时候去 build_opencv 这里目录下,双击打开 OpenCV.sln(VS2019工程文件),
Debug 版本
,点击顶部生成菜单,点击重新生成解决方案。
The problem is in the configuration step. Before pressing generate button, be sure that you specified the appropriate configurations. In this link , you can find an example of configuration to build opencv. Especially, take attention to 'WITH' segments.
重新来一遍 cmake 。。。
关闭vs,删掉build_opencv内容,重新打开cmake
依旧大量错误:
error MSB6006: “cmd.exe”已退出,代码为 1。
LINK : fatal error LNK1104: 无法打开文件“....libDebugopencv_gapi420d.lib”
...
再次搜问题,找到opencv issue里,https://github.com/opencv/opencv/issues/9908,解释如下:
I have encountered this problem today, using VS 2017 and CUDA 9.0.
The actual problem is the first error MSB6006 which leads to the other LNK1104 errors. I searched in google and find this solution:
https://stackoverflow.com/questions/45918446/compiling-opencv-3-3-with-cuda-9-0rc
When using CMAKE to generate the project, change the CUDA_HOST_COMPILER parameter to:
C:Program Files (x86)Microsoft Visual Studio2017CommunityVCToolsMSVC14.10.25017binHostX64x64cl.exe
The path of Visual Studio has changed in VS 2017 which leads to the errors.
This can solve most of problems you list, but some errors like: C2610, C2535, .etc still exists, but it seems affect only the performance tests. All OpenCV libraries are generated successfully and the INSTALL procedure also works fine.
好,再来一遍,我默认安装的vs2019 cl.exe路径为:
C:Program Files (x86)Microsoft Visual Studio2019CommunityVCToolsMSVC14.26.28801binHostx64x64cl.exe
新增 cmake配置项为:CUDA_HOST_COMPILER
,(输入后,手动再选择一次,路径是斜杠,不是反斜杠)
依旧是如上错误,不得解。。。。。
头疼。
继续搜发现,
这个配置项 Build_CUDA_STUBS
一定不要 ✔ !!!!
接下来总下总结一下:
1. 换成了opencv4.4版本
2.配置了 OPENCV_EXTRA_MODULES_PATH,WITH_CUDA,CUDA_FAST_MATH,ENABLE_FAST_MATCH,BUILD_opencv_world。
编译时间非常长,大约在2--4个小时时间 编译好后应该不会有什么错。如果有一两个Matlab啊Python啊之类的错误请无视之。如果几十个几百个错可能就会很大程度上影响使用了。
编译好后,找到解决方案目录里的 [CMakeTargets] 项展开的 [INSTALL] 项,右键 -> [Project Only(仅项目)] -> [Build Only INSTALL (仅生成INSTALL)]
。
就可以关闭vs2019了
接下来可以继续生成 release 版本的。
靠谱文章:https://blog.csdn.net/sinat_38679789/article/details/73466834
靠谱文章:https://kazusa.im/2020/08/08/compilingopencv4-4-0withcudaandopencv-python/
参考:https://cloud.tencent.com/developer/article/1523416
OPENCV_DNN_CUDA 这个配置项如果没有自己下载扩展包,就不要勾选,cmake会报错。
- 深入学习Apache Spark和TensorFlow
- 10.16/10.17/10.18 iptables nat表应用
- C++实现int与string之间的相互转换
- 10.15 iptables filter表案例
- 利用crypto++库,实现计算string的md5值
- daemon函数结合脚本实现start, stop, restart
- linux C语言实现文件锁
- linux基础(day 33)
- C 语言字符串分割函数
- 10.14 iptables语法
- 为安全出把力:CVE-2011-1938漏洞分析以及exp编写
- 10.13 netfilter5表5链介绍
- 用JAVA测量DEA页面的社交媒体流行度
- Java数组赋值
- JavaScript 教程
- JavaScript 编辑工具
- JavaScript 与HTML
- JavaScript 与Java
- JavaScript 数据结构
- JavaScript 基本数据类型
- JavaScript 特殊数据类型
- JavaScript 运算符
- JavaScript typeof 运算符
- JavaScript 表达式
- JavaScript 类型转换
- JavaScript 基本语法
- JavaScript 注释
- Javascript 基本处理流程
- Javascript 选择结构
- Javascript if 语句
- Javascript if 语句的嵌套
- Javascript switch 语句
- Javascript 循环结构
- Javascript 循环结构实例
- Javascript 跳转语句
- Javascript 控制语句总结
- Javascript 函数介绍
- Javascript 函数的定义
- Javascript 函数调用
- Javascript 几种特殊的函数
- JavaScript 内置函数简介
- Javascript eval() 函数
- Javascript isFinite() 函数
- Javascript isNaN() 函数
- parseInt() 与 parseFloat()
- escape() 与 unescape()
- Javascript 字符串介绍
- Javascript length属性
- javascript 字符串函数
- Javascript 日期对象简介
- Javascript 日期对象用途
- Date 对象属性和方法
- Javascript 数组是什么
- Javascript 创建数组
- Javascript 数组赋值与取值
- Javascript 数组属性和方法
- 猿实战16——承运商之搭建你的运费基石
- List对象去重及按属性去重的8种方法-java基础总结第六篇
- 总结java创建文件夹的4种方法及其优缺点-JAVA IO基础总结第三篇
- 总结java从文件中读取数据的6种方法-JAVA IO基础总结第二篇
- 总结java中文件拷贝剪切的5种方式-JAVA IO基础总结第五篇
- 总结java中删除文件或文件夹的7种方法-JAVA IO基础总结第四篇
- 总结java中创建并写文件的五种方式-JAVA IO基础总结第一篇
- 8成以上的java线程状态图都画错了,看看这个-图解java并发第二篇
- 特殊数据格式处理-JSON框架Jackson精解第2篇
- 序列化与反序列化核心用法-JSON框架Jackson精解第一篇
- 属性序列化自定义排序与字母表排序-JSON框架Jackson精解第3篇
- 【我在拉勾训练营学技术】mysql 索引面试再也不怕啦
- 智能合约中常见的漏洞总结复现#技术创作101训练营#
- JS根据列表排列对象数组
- git提取两次提交或者版本的差异文件并打包成zip压缩包