我想用 Qt 创建一个 gui 应用程序,在 Windows XP 上使用 opencv。我以前使用过 Qt 和 opencv,但从来没有一起使用过。长话短说,我无法让 opencv 与 Qt 一起工作。
在我搜索的所有论坛上,只有少量信息散布在各处,通常没有答案,我在这里总结了我所采取的所有步骤。
- 下载了Windows的Qt SDK(4.6.3),用了一段时间,成功。
- 下载了适用于 Windows 的 opencv 2.3.1 megapack,包含二进制文件。我成功地编译了包括 opencv 在内的 Qt 项目,但是任何 opencv 函数调用都会导致崩溃。我在一些论坛上读到 Windows megapack 中的二进制文件不支持 Qt,我必须自己构建 opencv
- 我下载了最新版本的 CMake (2.8)。
- 我从这里下载了opencv的源代码:http: //code.opencv.org/svn/opencv/branches/2.3/
- 我下载了我拥有的 Qt 版本的源代码(4.6.3)
- 我找到了旧版本的 Visual Studio 2005
- 我用 CMake 创建了一个 VS2005 项目,检查了对 Qt 的支持。(
WITH_QT
选中) - 我在VS2005中构建了opencv。它创建了大多数库,但不是全部。
Highgui
是失败者之一。问题:Qt\4.6.3\src\corelib\global\qconfig.h
没有找到。qconfig.h
我下载的源中根本没有!我找到了一些模板qconfig-large.h
等qconfig-small.h
,所以我将其中一个重命名为qconfig.h
. 现在我得到了一个充满链接器错误的屏幕。 - 我下载了最新的 Qt 源代码(4.8.1)。现在有一个
qbenchmark.h
包含QtTest/qbenchmarkmetric.h
找不到的源文件。 - 我放弃了,尝试了 MinGW。
- 我下载了最新的MinGW(2011.11.18)
- 我将 CMake 设置为生成 MinGW makefile,但出现以下错误:
.
CMake Error at C:/Program Files/CMake 2.8/share/cmake-2.8/Modules/Platform/Windows-g++.cmake:1 (INCLUDE):
include could not find load file:
C:/Program Files/CMake 2.8/share/cmake-2.8/Modules/Platform/Windows-gcc.cmake
Call Stack (most recent call first):
C:/Program Files/CMake 2.8/share/cmake-2.8/Modules/CMakeCXXInformation.cmake:59 (INCLUDE)
没错,Modules/Platform 目录中有一个Windows-g++.cmake
文件,但它引用Windows-gcc.cmake
了不存在的文件!
有没有人设法在 Windows 上构建带有 Qt 支持的 opencv,如果是,如何?
编辑:
问题肯定出在 Qt 源代码上。我设法生成了一个 MinGW makefile,并且构建一切正常,直到它停止,src/testlib/qtestsystem.h
因为有一个包含QtCore/qelapsedtimer.h
文件位于完全不同的目录中!Qt 是否发布了不完整的源代码,还是我做错了什么?
编辑2
我的折磨还在继续。我清理了所有东西并重新开始。这次甚至没有尝试 Visual Studio。
- 我下载了带有源代码的最新 Qt 库(4.8.1)
- 我下载了最新的MinGW(2011.11.18)
- 使用 CMake,我成功创建了一个 Makefile,并使用 MinGW 构建了它。我有一些闪亮的新库(
libopencv_core231
,等)。我很高兴,但是我这么快就庆祝是多么错误啊!! - 我下载了最新的Qt SDK(奇怪的是4.8.0,所以我设置Qt Creator使用4.8.1)并创建了一个没有opencv的测试程序,看看它是否有效。有效!
- 我尝试使用opencv,只是读取和显示图像。它没有用。
exited with code -1073741511
- 我尝试在
.exe
Qt Creator 之外直接运行。它抱怨失踪libstdc++-6.dll
- 我搜索了它,在我的 MinGW 安装中找到(c:\mingw\bin,958 KB),在我的 Qt 安装中找到一个(c:\qt\mingw\bin,793 KB) - 这个 mingw 是捆绑的与 Qt。
- 我尝试了两者,将它们复制到我所在的同一文件夹中
.exe
,但都没有奏效。我得到“程序入口点 _ZNSt9exceptionD2Ev 不能位于动态链接库 libstdc++-6.dll 中。” 既。这是在调试中,所以我尝试了发布,我得到了一个类似的错误,没有找到其他一些入口点。 - 我搜索了论坛,发现我应该静态链接 libstdc++ 的建议。我
-static-libgcc -static-libstdc++
在行QMAKE_LFLAGS =
和QMAKE_LFLAGS_DEBUG =
文件中插入c:\Qt\mkspecs\win32-g++\qmake.conf
。即使在重新启动 Qt Creator 并重建之后,这也完全没有影响。如果我不复制libstdc++-6.dll
,它仍然需要它。
当然,我没有 opencv 的简单测试程序从exe
不需要任何运行libstdc++-6.dll
,所以这意味着我的 opencv 构建负责?我想重新构建 opencv,但我找不到任何涉及 libstdc++ 的 CMake 设置!
这可能是一个线索:
使用其中一个libstdc++-6.dll
文件时,有关缺少入口点的错误提到了 QtGui4.dll。我有一个调试版本,所以它应该是 QtGui* d *4.dll,不是吗?libstdc++
调试和发布有不同的s吗?无论哪种方式,我都尝试构建版本,但它也没有工作,同样的错误
这个星球上没有一个人尝试在 Windows xp 上将 Qt 与 QtCreator 和 opencv 2.3 一起使用并成功了吗?通过搜索所有论坛和 Qt 档案,我找不到任何人。我已经准备好在 Linux 中进行开发,但无论如何我迟早需要一个 Windows 版本。
我试图抵制黑暗面的诱惑,它在我耳边低语,忘记 Qt、MinGW、g++、opencv,并尝试在 Visual Basic 中破解一些东西。哦,恐怖!