Win7 / Eclipse / OpenCV / MinGW:应用程序每次启动时都会崩溃

Win7 / Eclipse / OpenCV / MinGW: Application crashes everytime it starts

本文关键字:启动 崩溃 应用程序 OpenCV Eclipse MinGW Win7      更新时间:2023-10-16

经过与我和OpenCV的激烈斗争,我终于找到了本教程:

OpenCV with MinGW

on Eclipse Tutorial(滚动到"OpenCV - with CMake & MinGW")

按照编写的内容做了所有操作,但是每次我尝试启动应用程序时,它都会在几秒钟后停止响应,并显示Windows警报通信。我注意到,我可以自由运行标准C++程序并包含头文件,但是在一行OpenCV代码之后,它无法正常工作。也没有关于错误的信息。

你为什么不试试官方教程 http://docs.opencv.org/doc/tutorials/introduction/linux_eclipse/linux_eclipse.html#linux-eclipse-usage

这是OpenCV文档中的官方网站,应该可以帮助您入门,它包括帮助您开始使用许多其他平台的教程http://docs.opencv.org/doc/tutorials/introduction/table_of_content_introduction/table_of_content_introduction.html#table-of-content-introduction

我也有一些时间让OpenCV运行,但最终我找到了一些有用的东西(我使用Qt Creator作为我的IDE,而不是Eclipse,但也许问题和解决方案是相似的)。

起初我试图下载OpenCV 2.4.8,但我发现它不包含任何MinGW二进制文件。我关注了网络上的一个论坛并安装了CMake,但OpenCV 2.4.8似乎不包含MinGW的CMake目标。在阅读了更多的论坛后,我下载了OpenCV 2.4.3,并能够使用CMake和MinGW 4.8(Qt 5.2附带的版本)来构建OpenCV。这使我达到了可以编译程序并尝试运行它们的地步。一些纯 c 命令甚至像 cvLoadImage 一样工作,但任何 c++ 命令,如 imread 或 Mat::zeros(3,3, CV_8UC1) 都会导致崩溃。

我尝试了几次使用不同的选项构建 openCV。一些网站建议关闭SSE和SSE2或构建调试版本,但这些都不适合我。

最后我最终下载了TDM-GCC-32。我下载了按需安装程序,并确保获得编译器的 dw2 版本(因为不久前我花了一些时间处理 dw2 与 sjlj 的不兼容性)。最后,我用TDM-GCC重建了OpenCV,并将TDM-GCC设置为Qt Creator中的编译器。这最终成为修复程序。

我认为OpenCV Mat类型使用的引用计数/分配代码与某些版本的MinGW之间存在一些不兼容。我之所以这样说,是因为我所有的崩溃似乎都来自使用 openCV 矩阵的代码部分。(似乎它没有正确初始化或其他什么)。切换到TDM-GCC编译器解决了这个问题。