简单的Qt项目与openCV瞬间崩溃



我尝试在Qt项目中使用openCV。但是如果我链接openCV的发布库,我的发布构建在发布时立即崩溃。调试库允许程序启动,但当我尝试使用openCV函数时,应用程序崩溃(众所周知,在openCV中混合发布/调试会导致一些崩溃)。

所以我做了一个简单的项目,它甚至不会启动。发布版和调试版都会崩溃,使用调试器会导致一个小窗口显示'unexpected CDB exit'。

来源:

QT       += core gui
greaterThan(QT_MAJOR_VERSION, 4): QT += widgets
TARGET = test_openCV
TEMPLATE = app
#flags to generate a .map file
QMAKE_LFLAGS_RELEASE +=/MAP
QMAKE_LFLAGS_RELEASE += /debug
SOURCES += main.cpp
        MainWindow.cpp
HEADERS  += MainWindow.h
FORMS    += MainWindow.ui
INCLUDEPATH += $$PWD
INCLUDEPATH += "D:/openCV/build/include"
#Switching between handbuild and the build I downloaded have no effect.
#I am sure the path are good. Quadra checked.
#LIBS += -L"D:/openCV/build/x64/vc11/lib"
LIBS += -L"D:/openCV/hand_build/lib/Release"
LIBS += -L"D:/openCV/hand_build/lib/Debug"
#disables the "fopen not secure" warning in openCV.    
DEFINES += _CRT_SECURE_NO_WARNINGS
win32:CONFIG(release, debug|release): LIBS += -lopencv_core2413 -lopencv_highgui2413 -lopencv_imgproc2413
else:win32:CONFIG(debug, debug|release): LIBS += -lopencv_core2413d -lopencv_highgui2413d -lopencv_imgproc2413d

main.cpp:

#include "MainWindow.h"
#include <QApplication>
int main(int argc, char *argv[])
{
    QApplication a(argc, argv);
    MainWindow w;
    w.show();
    return a.exec();
}

MainWindow.h:

#ifndef MAINWINDOW_H
#define MAINWINDOW_H
#include <QMainWindow>
#include <opencv/cv.h>
namespace Ui {
class MainWindow;
}
class MainWindow : public QMainWindow
{
    Q_OBJECT
public:
    explicit MainWindow(QWidget *parent = 0);
    ~MainWindow();
private:
    Ui::MainWindow *ui;
};
#endif // MAINWINDOW_H

和MainWindow.cpp:

#include "MainWindow.h"
#include "ui_MainWindow.h"
#include "opencv2/core.hpp"
#include "opencv2/highgui.hpp"
#include <QDebug>

MainWindow::MainWindow(QWidget *parent) :
    QMainWindow(parent),
    ui(new Ui::MainWindow)
{
    ui->setupUi(this);
    //Removing this line will causes the program to start normally (guess it won't link the libs if nothing from openCV is used).
    cv::Mat image;
}
MainWindow::~MainWindow()
{
    delete ui;
}

启动app时得到的结果:

Starting D:Colinbuild_test_openCVreleasetest_openCV.exe...
program suddenly ended
D:Colinbuild_test_openCVreleasetest_openCV.exe crashed

我工作在Windows 7/MSCV2012 openGL 64bits/Qt 5.2.1 openGL.

有没有人看到我可能犯的错误?

我有一个类似的设置和你得到完全相同的问题。问题是没有定义到相应dll的路径。这些dll:

  • opencv_core2411.dll
  • opencv_highgui2411.dll
  • opencv_imgproc2411.dll

应该在D:/openCV/hand_build/bin/(或者D:/openCV/hand_build/bin/Release/)。添加另一行:

LIBS += -L"D:/openCV/hand_build/bin/Release/"

我刚刚遇到了类似的问题。由于在运行时找不到适当的DLL,程序正在崩溃。将OpenCV目录添加到我的Windows PATH中为我解决了这个问题。

构建中的所有项必须使用相同的Visual Studio版本构建,这意味着:

  1. 您正在使用的Qt安装。
  2. OpenCV。
  3. 代码

很可能以上至少有一个不是使用同一个编译器构建的。如果OpenCV与Qt相关联,那么它也必须是针对Qt的二进制兼容版本构建的。

相关内容

  • 没有找到相关文章

最新更新