opencv3.4.16编译报错记录(VS2022+gpu)

一、protobuf版本问题 

        opencv3.4.16 包括contrib 扩展的编译方式网上有很多,根据教程来基本没啥问题,我这里遇到的问题是因为VS2022 默认的C++ 语言标准为C++ 14,在我不修改语言标准的情况下,编译protobuf 模块会报错"hash_compare 不是 std 的成员"。虽然看起来报错很多,但是根本原因都是hash_map 在C++ 高版本语言标准所做的修改导致的 :

        这个问题我在编译opencv4.7.0 的时候已经没有了,应该是更新的protobuf 的版本从3.5.2 升级到3.19.2 之后,不再使用hash_map 所以就没有这个问题了。但是opencv3.4.16 不能直接升级protobuf 的版本,因为涉及到跟很多其它组件的兼容性问题,但是又不想修改C++ 的语言标准的话,可以通过下面两步修改来解决:

1. 在opencv-3.4.16/3rdparty/protobuf/src/google/protobuf/stubs/hash.h 头文件中加入<hash_map>的引用:加入这个引用之后,opencv编译的时候就会到对应的文件下去寻找hash_compare 相关的类了。但是这时会引入另一个报错,大意就是<hash_map>在后续的版本会被移除,建议你使用<unordered_map>,这里我们就不听它的了,因为它后面还有一句是可以通过宏定义来屏蔽这个报错:

2. 在<hash.h>头文件的开头,加_SILENCE_STDEXT_HASH_DEPRECATION_WARNINGS 的宏定义:这样就可以屏蔽上述的报错,正常使用<hash_map>进行编译了:

二、CMake-Configure 的时候遇到的问题

1. Could not find OpenBLAS lib

        我环境里确实没安装OpenBLAS,没有检测到直接配置项置为OFF没有问题,编译出来的opencv 库就不会使用OpenBLAS相关的功能。

        如果想要使用OpenBLAS的话,需要去https://github.com/xianyi/OpenBLAS.git 下载对应的压缩包,然后进行解压,解压完成后修改opencv-3.4.16/cmake/OpenCVFindOpenBLAS.cmake 文件中的FIND_PATH 和FIND_LIBRARY 对应的目录。因为我下载的版本对应的库名称为libopenblas.lib,所以FIND_LIBRARY 中库名称也要做相应修改:

        修改完成后重新在CMake 上执行Configure 即可。

2. CMake Warning at cmake/OpenCVGenSetupVars.cmake:54 (message):CONFIGURATION IS NOT SUPPORTED 

         这个网上基本都提供了解决办法,就是在CMake 的配置项里把OPENCV_GENERATE_SETUPVARS 选项关闭就可以了:

         具体原因可以查看opencv-3.4.16/cmake/OpenCVGenSetupVars.cmake 文件,直接搜索这个报错就可以看到是由于opencv-python 的路径配置有问题导致的。一般情况下,编译opencv 库都是为了C++ 下使用,所以把python 相关的这个选项关闭掉是没啥问题的。

        我不太确定是不是因为我没有安装python2(我只安装了python3) 导致的,如果想不通过关闭选项解决这个报错的话,可以安装或者配置一下试试。

三、编译CUDA版本遇到的问题

1. 进行CMake-Configure的时候报错:CUDA: Autodetection arch list is empty

        这个是Windows下无法检测到CUDA架构的问题,需要修改CUDA_ARCH_BIN 配置项的值,可以到官网查询自己显卡对应的算力,然后填写在配置项中。

2. 编译的时候报错:Unexpected compiler version, expected CUDA 11.6 or newer

        这个是由于VS2022 对应的SDK 编译CUDA 的时候默认会校验版本,而我电脑安装的是11.3 比要求的11.6 版本要低,所以编译失败。如果不想调整VS 或者CUDA 版本的话,在opencv-3.4.16 目录下的CMakeLists.txt 文件中增加_ALLOW_COMPILER_AND_STL_VERSION_MISMATCH 的宏定义即可:

 

  • 14
    点赞
  • 17
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
VS2022中配置OpenCV的步骤如下: 1. 下载并安装OpenCV的安装包,例如OpenCV4.5.5。 2. 打开VS2022,创建或打开一个项目。 3. 将OpenCV的头文件路径添加到项目中。你只需要在代码中添加以下include语句: `#include "opencv2/opencv.hpp"`。[2] 4. 将OpenCV的库文件路径添加到项目中。在VC目录 -> 库目录中添加OpenCV的lib路径。对于VS2022,可以使用vc15路径。 5. 配置附加依赖项。在项目属性 -> 链接器 -> 输入 -> 附加依赖项中,添加OpenCV的库文件名,如opencv_world455.lib。这样,在编译和链接时,程序就能够找到OpenCV的库文件了。 6. 确保将OpenCV的DLL文件拷贝到项目的Debug或Release文件夹中。 这样,你就成功配置了VS2022中的OpenCV。你可以使用OpenCV的函数和类来进行图像处理和计算机视觉任务了。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* *3* [VS2022 + Opencv4.5.5 + C++ 配置](https://blog.csdn.net/gdxb666/article/details/130779810)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 50%"] - *2* [20220922 Windows平台用VS编译OpenCV + Contrib + 各种注意事项](https://blog.csdn.net/Vissence/article/details/127000366)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 50%"] [ .reference_list ]
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值