OpenCV 2.4.5 和 Qt5 错误:S

Posted

技术标签:

【中文标题】OpenCV 2.4.5 和 Qt5 错误:S【英文标题】:OpenCV 2.4.5 and Qt5 error :S 【发布时间】:2013-07-02 08:20:44 【问题描述】:

我正在尝试使用 qt5 编译第一个打开的 cv 程序,但是当我尝试编译时出现这个奇怪的错误

  Starting /home/QtContour/build-untitled-Desktop_Qt_5_0_2_GCC_64bit-Debug/untitled...
*** Error in `/home/QtContour/build-untitled-Desktop_Qt_5_0_2_GCC_64bit-Debug/untitled': realloc(): invalid pointer: 0x00007f64e3750340 ***
======= Backtrace: =========
/lib/x86_64-linux-gnu/libc.so.6(+0x7f576)[0x7f64e26b0576]
/lib/x86_64-linux-gnu/libc.so.6(realloc+0x300)[0x7f64e26b4da0]
/home//Qt5.0.2/5.0.2/gcc_64/lib/libQt5Core.so.5(_ZN9QListData7reallocEi+0x26)[0x7f64e31e3e46]
/home/Qt5.0.2/5.0.2/gcc_64/lib/libQt5Core.so.5(_ZN9QListData7prependEv+0x82)[0x7f64e31e4012]
/home/Qt5.0.2/5.0.2/gcc_64/lib/libQt5Core.so.5(_ZN10QTextCodecC1Ev+0x85)[0x7f64e339dbe5]
/home/Qt5.0.2/5.0.2/gcc_64/lib/libQt5Core.so.5(+0x2728b9)[0x7f64e33a18b9]
/home/Qt5.0.2/5.0.2/gcc_64/lib/libQt5Core.so.5(+0x272d0d)[0x7f64e33a1d0d]
/home/Qt5.0.2/5.0.2/gcc_64/lib/libQt5Core.so.5(_ZN10QTextCodec14codecForLocaleEv+0x32)[0x7f64e339d592]
/home/Qt5.0.2/5.0.2/gcc_64/lib/libQt5Core.so.5(_ZNK7QString11toLocal8BitEv+0x19)[0x7f64e3211bd9]
/home/Qt5.0.2/5.0.2/gcc_64/lib/libQt5Core.so.5(+0x80702)[0x7f64e31af702]
/home/Qt5.0.2/5.0.2/gcc_64/lib/libQt5Core.so.5(+0x7e07c)[0x7f64e31ad07c]
/home/Qt5.0.2/5.0.2/gcc_64/lib/libQt5Core.so.5(+0x7e19a)[0x7f64e31ad19a]
/home/Qt5.0.2/5.0.2/gcc_64/lib/libQt5Core.so.5(_ZNK14QMessageLogger5fatalEPKcz+0xa9)[0x7f64e31ad8c9]
/home/Qt5.0.2/5.0.2/gcc_64/lib/libQt5Core.so.5(_ZN9QMetaType22registerNormalizedTypeERK10QByteArrayPFvPvEPFS3_PKvES5_PFS3_S3_S7_Ei6QFlagsINS_8TypeFlagEEPK11QMetaObject+0x48a)[0x7f64e3361bba]
/home/Qt5.0.2/5.0.2/gcc_64/lib/libQt5Core.so.5(_ZN9QMetaType12registerTypeEPKcPFvPvEPFS2_PKvES4_PFS2_S2_S6_Ei6QFlagsINS_8TypeFlagEEPK11QMetaObject+0x61)[0x7f64e3361c51]
/home/Qt5.0.2/5.0.2/gcc_64/lib/libQt5Core.so.5(_ZN9QMetaType12registerTypeEPKcPFvPvEPFS2_PKvE+0x2a)[0x7f64e3361cea]
/usr/lib/x86_64-linux-gnu/libQtGui.so.4(+0x1b995e)[0x7f64ddf0e95e]
/lib64/ld-linux-x86-64.so.2(+0xf876)[0x7f64e4679876]
/lib64/ld-linux-x86-64.so.2(+0xf930)[0x7f64e4679930]
/lib64/ld-linux-x86-64.so.2(+0x168a)[0x7f64e466b68a]
======= Memory map: ========
00400000-00405000 r-xp 00000000 08:01 7604445                            /home/QtContour/build-untitled-Desktop_Qt_5_0_2_GCC_64bit-Debug/untitled
00604000-00605000 r--p 00004000 08:01 7604445                            /home/QtContour/build-untitled-Desktop_Qt_5_0_2_GCC_64bit-Debug/untitled
00605000-00606000 rw-p 00005000 08:01 7604445                            /home/QtContour/build-untitled-Desktop_Qt_5_0_2_GCC_64bit-Debug/untitled
01890000-018b1000 rw-p 00000000 00:00 0                                  [heap]
7f64d40a5000-7f64d40a8000 r-xp 00000000 08:01 42208894                   /lib/x86_64-linux-gnu/libgpg-error.so.0.8.0
7f64d40a8000-7f64d42a7000 ---p 00003000 08:01 42208894                   /lib/x86_64-linux-gnu/libgpg-error.so.0.8.0
7f64d42a7000-7f64d42a8000 r--p 00002000 08:01 42208894                   /lib/x86_64-linux-gnu/libgpg-error.so.0.8.0
7f64d42a8000-7f64d42a9000 rw-p 00003000 08:01 42208894                   /lib/x86_64-linux-gnu/libgpg-error.so.0.8.0
7f64d42a9000-7f64d42ad000 r-xp 00000000 08:01 42209011                   /lib/x86_64-linux-gnu/libuuid.so.1.3.0 ... ....(much more)

我的 main.cpp 是那个

#include "mainwindow.h"
#include <QApplication>
#include <opencv/cv.h>
//#include <opencv2/highgui/highgui.hpp>
#include"highgui.h"

using namespace cv;

int main(int argc, char *argv[])

    QApplication a(argc, argv);
    MainWindow w;
    w.show();

    Mat frame;

    VideoCapture cap(0);
     if(cap.isOpened())
       // check if we succeeded

      namedWindow("normal",1);
      for(;;)
      

          cap >> frame; // get a new frame from camera
          imshow("nomral",frame);
          if(waitKey(30) >= 0) break;
      

    

 return a.exec();


我的项目属性是

#-------------------------------------------------
#
# Project created by QtCreator 2013-07-02T09:42:06
#
#-------------------------------------------------

QT       += core gui

greaterThan(QT_MAJOR_VERSION, 4): QT += widgets

TARGET = untitled
TEMPLATE = app


SOURCES += main.cpp\
        mainwindow.cpp

HEADERS  += mainwindow.h

FORMS    += mainwindow.ui


unix: CONFIG += link_pkgconfig
unix: PKGCONFIG += opencv

我不知道是谁造成了这个问题,这是我有生以来第一次看到它 我希望你能帮助我

还是谢谢

【问题讨论】:

【参考方案1】:

使用 cmake 时,请务必取消选中 WITH_QT。 Opencv中使用的内部版本(Qt4.0)可能会与QT Creator(Qt 5.0)发生冲突 这就是我解决问题的方法。

只需清除 cmake 缓存,取消选中 WITH_QT(可能还有 WITH_TBB),然后确保之前的 opencv 版本已删除,然后重建 opencv。繁荣,现在它可以工作了!

【讨论】:

但是如果我想要 WITH__QT 怎么办? @stfn 然后安装旧版本 (Qt 4.0) 而不是新版本 (Qt 5.0+)。【参考方案2】:

我也遇到了同样的问题,找了一上午,重新安装OpenCV解决了。我的 opencv 是 2.4.9 版本,构建在 Ubuntu 12.04 系统上,后来我使用 Linux 安装程序安装了 QT creator。 QT creator 的版本是基于 QT 5.3.1 的 3.1.2。我的 OpenCV 安装在自定义路径上。 我刚刚删除了构建文件夹

cd opencv-2.4.9
rm -r build

我只是在 cmake 中没有 -D WITH_QT 标志的情况下再次构建 OpenCV

mkdir build
cd build
cmake -D WITH_XINE=ON -D WITH_OPENGL=ON -D WITH_TBB=ON -D BUILD_EXAMPLES=ON ..
make -j4
sudo make install

make 中的 -j4 标志表示 4 核并行。 魔术发生了,代码有效! 它不起作用的原因是,当使用 cmake WITH_QT 标志时,系统构建了 opencv 使用系统默认版本的qt,与最新版本不兼容 qt从官网下载。但是,要使其正常工作,我们必须拥有正确版本的 QT。根据我的经验,我们不必解开 WITH_TBB。

【讨论】:

以上是关于OpenCV 2.4.5 和 Qt5 错误:S的主要内容,如果未能解决你的问题,请参考以下文章

使用 OpenCV3.4.5 在 Qt5 中与 Cuda 相关的编译错误

Xcode 查找错误的 OpenCV 库名称:2.4.dylib 而不是 2.4.5.dylib

OpenCV2.4.9 Qt5.3.1 开发环境配置错误原因与解决方案

OpenCV2.4.9 With Qt5.3.1 开发环境配置问题解决篇

opencv4.5.5+qt5.15.2+vtk9.1+mingw81_64编译记录

opencv4.5.5+qt5.15.2+vtk9.1+mingw81_64编译记录