使用CMake和MinGW配置Opencv-MinGW版本,以适用于Qt5的MinGW工具集(undefined reference to ‘cv::Mat::Mat()‘)

全网与本博客内容相关的工作很多,只要可以解决问题,选用哪一种方法都好,最重要的环节是软件版本系统环境

成功的版本示例
Qt Creator 5.12.9Opencv 4.9.0mingW 8.1.0 sehCMake 3.29.1
失败的版本示例
Opencv 3.4.16mingW 7.3.0 sjlj

目录

1. 问题源头

2. 解决方案

3. 成果展示

4. 知识扩展

4.1 MinGW和MSVC的区别

4.2 MinGW 的 sjlj 和 seh 版本的区别


1. 问题源头

正常的 Opencv 库可能与 Qt5 MinGW 工具集不兼容,导致报错如下:

2. 解决方案

MSVC:Qt5 只兼容MSVC的2015、2017版本,本机的VS是2019版本,而 Qt6 可以兼容更高版本的MSVC,本人未尝试安装。

MinGW:Qt5 MSVC可以正常使用 Opencv 库,而Qt5 MinGW 大多数情况下,需要使用 CMake 编译 Opencv-MinGW 库。

本博客为了解决上述问题,尝试编译 Opencv-MinGW 库。

(1)官网中下载 Opencv 4.9.0、mingW 8.1.0 seh、CMake 3.29.1,并配置环境变量如下:

(2)使用 CMake 进行编译,步骤如下:

a. 选择你的 Opencv 库的路径和需要建立的 Opencv-MinGW 路径。 

b. 输入关键词 “world”,选择 Value。

c. 输入关键词 “python”,取消 Value。

 d. 点击 “Add Entry” 添加项。

e. 依次点击 Configue 配置项目、Generate 生成项目。

f. 依次操作:打开 CMD,cd “build-mingw 路径”,输入命令——

minGW32-make -j 6
mingGW32-make install

其中,-j 6 代表使用几个线程进行编译,配置成功后的文件夹如下:

g. 完成 Opencv-MinGW 编译之后,配置 Qt5 项目中的环境如下:

3. 成果展示

解决上述问题后,运行车牌识别工程项目,界面展示结果如下:

 

4. 知识扩展

4.1 MinGW和MSVC的区别

MinGW(Minimalist GNU for Windows)和 MSVC(Microsoft Visual C++)是在 Windows 平台上用于 C 和 C++ 编程的两种不同的开发工具集。MSVC可以更好地与 Windows 平台集成,MinGW更注重开源性、跨平台性和自由度。

4.2 MinGW 的 sjlj 和 seh 版本的区别

(1)sjlj(Setjmp / Longjmp)
sjlj 是一种比较简单的异常处理机制,它使用了类似于 C 语言中的 setjmp() 和 longjmp() 函数来实现异常处理。sjlj 版本的 MinGW 它通常会比较慢,因为它需要保存和恢复函数的调用栈信息。

(2)seh(Structured Exception Handling)
seh 是 Windows 平台上的官方异常处理机制,由操作系统提供支持。seh 版本的 MinGW 利用了 Windows 的 seh 机制来处理异常,这种方式更加高效和稳定。

总的来说,seh 版本的 MinGW 在 Windows 平台上可能会表现更好,特别是当与 Windows API 或其他 Windows 特定的功能交互时。

>>> 如有疑问,欢迎评论区一起探讨。

  • 10
    点赞
  • 23
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
引用\[1\]:collect2.exe: error: ld returned 1 exit status mingw32-make\[2\]: *** \[modules\core\CMakeFiles\opencv_core.dir\build.make:1800: bin/libopencv_core451.dll\] Error 1 mingw32-make\[1\]: *** \[CMakeFiles\Makefile2:1794: modules/core/CMakeFiles/opencv_core.dir/all\] Error 2 mingw32-make: *** \[Makefile:165: all\] Error 2 。 引用\[2\]:mingw32-make\[2\]: *** \[modules\python2\CMakeFiles\opencv_python2.dir\build.make:76: modules/python2/CMakeFiles/opencv_python2.dir/__/src2/cv2.cpp.obj\] Error 1 mingw32-make\[1\]: *** \[CMakeFiles\Makefile2:3365: modules/python2/CMakeFiles/opencv_python2.dir/all\] Error 2 mingw32-make: *** \[Makefile:165: all\] Error 2 。 引用\[3\]:问题:gcc: error: long: No such file or directory** C:\PROGRA~2\Dev-Cpp\MinGW64\bin\windres.exe: preprocessing failed. modules\core\CMakeFiles\opencv_core.dir\build.make:1420: recipe for target ‘modules/core/CMakeFiles/opencv_core.dir/vs_version.rc.obj’ failed mingw32-make\[2\]: *** \[modules/core/CMakeFiles/opencv_core.dir/vs_version.rc.obj\] Error 1 mingw32-make\[2\]: *** Waiting for unfinished jobs… CMakeFiles\Makefile2:1603: recipe for target ‘modules/core/CMakeFiles/opencv_core.dir/all’ failed mingw32-make\[1\]: *** \[modules/core/CMakeFiles/opencv_core.dir/all\] Error 2 。 问题:qtOpencv4 cmakemingw32-make: *** \[Makefile:165: all\] Error 2 回答: 这些错误信息表明在使用Qt中的Opencv4进行cmake时出现了问题。具体来说,出现了ld returned 1 exit status、Error 1、Error 2等错误。这些错误通常是由于编译器无法找到所需的文件或目录导致的。可能的原因包括缺少依赖项、路径设置错误或编译器配置问题。为了解决这些错误,您可以尝试以下几个步骤: 1. 确保您已正确安装了Opencv4和Qt,并且它们的路径已正确设置。 2. 检查您的编译器配置是否正确,包括编译器版本和路径设置。 3. 检查您的项目配置文件是否正确,包括CMakeLists.txt文件中的路径和依赖项设置。 4. 确保您的系统中已安装所需的依赖项,并且它们的路径正确。 5. 尝试清理并重新构建您的项目,以确保所有文件和依赖项都正确配置。 如果您仍然遇到问题,建议您查阅Opencv4和Qt的官方文档,以获取更详细的指导和解决方案。 #### 引用[.reference_title] - *1* *2* [Qt5.14+Opencv4.1+CMake3.22配置](https://blog.csdn.net/qq_45792470/article/details/125774264)[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^v91^insert_down1,239^v3^insert_chatgpt"}} ] [.reference_item] - *3* [OpenCV使用CMakeMinGW-w64的编译安装](https://blog.csdn.net/qq_61604164/article/details/121731875)[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^v91^insert_down1,239^v3^insert_chatgpt"}} ] [.reference_item] [ .reference_list ]

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Flying Bulldog

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值