在Windows上使用Qt和opencv构建问题

时间:2012-04-07 17:48:18

标签: c++ windows qt opencv

我想用Qt在Windows XP上使用opencv创建一个gui应用程序。我之前使用过Qt和opencv,但从未在一起。长话短说,我无法使用Qt打开opencv。

在我搜索的所有论坛上,只有很少的信息散布在周围,通常没有答案,我在这里总结了我已经采取的所有步骤。

  1. 下载适用于Windows的Qt SDK(4.6.3),并成功使用了一段时间。
  2. 下载适用于Windows的opencv 2.3.1 megapack,附带二进制文件。我成功编译了包括opencv在内的Qt项目,但是任何opencv函数调用都导致了崩溃。我在一些论坛上看到Windows上的二进制文件不支持Qt,我必须自己构建opencv
  3. 我下载了最新版本的CMake(2.8)。
  4. 我从这里下载了opencv的来源:http://code.opencv.org/svn/opencv/branches/2.3/
  5. 我下载了Qt版本(4.6.3)
  6. 的源代码
  7. 我找到了旧版本的visual Studio 2005
  8. 我用CMake创建了一个VS2005项目,检查了对Qt的支持。 (WITH_QT已检查)
  9. 我在VS2005中构建了opencv。它创建了大多数库,但不是全部。 Highgui是失败者之一。问题:找不到Qt\4.6.3\src\corelib\global\qconfig.h。我下载的源代码中根本没有qconfig.h!我找到了一些模板qconfig-large.hqconfig-small.h等,因此我将其中一个重命名为qconfig.h。现在我得到了一个充满链接器错误的屏幕。
  10. 我下载了最新的Qt源代码(4.8.1)。现在有一个源文件qbenchmark.h,其中包含无法找到的QtTest/qbenchmarkmetric.h
  11. 我放弃了,并尝试了MinGW。
  12. 我下载了最新的MinGW(2011.11.18)
  13. 我设置CMake生成MinGW makefile,但是我收到以下错误:
  14. 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是否发布了不完整的来源,或者我做错了什么?

    EDIT2

    我的痛苦还在继续。我清理了一切并重新开始。这次甚至没有尝试Visual Studio。

    1. 我使用source(4.8.1)
    2. 下载了最新的Qt库
    3. 我下载了最新的MinGW(2011.11.18)
    4. 使用CMake,我成功创建了一个Makefile,并使用MinGW构建它。我得到了一些闪亮的新库(libopencv_core231,etv。)。我很高兴,但我很快就庆祝这件事!!
    5. 我下载了最新的Qt SDK(奇怪的是,它是4.8.0,因此我将Qt Creator设置为使用4.8.1)并创建了一个没有opencv的测试程序,看它是否有效。它奏效了!
    6. 我尝试使用opencv,只是阅读并显示图像。它没有用。 exited with code -1073741511
    7. 我尝试在Qt Creator之外直接运行.exe。它抱怨缺少libstdc++-6.dll
    8. 我搜索了它,并在我的MinGW安装(c:\ mingw \ bin,958 KB)中找到了,并在我的Qt安装中找到了一个(c:\ qt \ mingw \ bin,793 KB) - 这个mingw与Qt捆绑在一起。
    9. 我尝试了两种方法,将它们复制到.exe所在的同一文件夹中,但都没有用。我得到了#34;程序入口点_ZNSt9exceptionD2Ev无法位于动态链接库libstdc ++ - 6.dll。"既。这是在调试中,所以我尝试发布,我得到了类似的错误,其他一些入口点未找到。
    10. 我搜索了论坛,我找到了建议,我应该静态链接libstdc ++。我在文件-static-libgcc -static-libstdc++中的QMAKE_LFLAGS =行和QMAKE_LFLAGS_DEBUG =处添加了c:\Qt\mkspecs\win32-g++\qmake.conf。即使在重新启动Qt Creator并重建之后,这根本没有任何影响。如果我不复制libstdc++-6.dll,它仍然需要它。
    11. 当然,没有opencv的简单测试程序从exe运行而不需要任何libstdc++-6.dll,这意味着我的opencv构建负责吗?我想重新构建opencv,但我找不到任何涉及libstdc ++的CMake设置!

      这可能是一个线索: 使用其中一个libstdc++-6.dll文件时,有关缺少入口点的错误提到QtGui4.dll。我有一个调试版本,所以它应该是QtGui * d * 4.d​​ll,不应该吗?是否有不同的libstdc++用于调试和发布?无论哪种方式,我都尝试构建版本,但它也没有工作,同样的错误

      这个星球上没有一个人在Windows xp上尝试将Qt与QtCreator和opencv 2.3一起使用,并且成功了吗?从搜索所有论坛和Qt档案,我找不到任何人。我已准备好在Linux中进行开发,但无论如何我迟早都需要Windows版本。

      我试图抵制黑暗面的诱惑,它在我的耳边低声说要忘记Qt,MinGW,g ++,opencv并试图在Visual Basic中破解一些东西。哦,恐怖!

3 个答案:

答案 0 :(得分:3)

仅供参考,我基本上完成了将Qt和OpenCV结合在一起的噩梦。这是我的经历:

  1. 我用Qt Creator 2.4.1下载了Qt SDK 4.7.4并安装它,没问题。
  2. 我下载并安装了OpenCV 2.4.2并且不知道它已经附带MinGW ......
  3. 我下载了MinGW编译器,当然它的版本与Qt已有的版本不同
  4. 这完全搞砸了我的CMake,即使我明确告诉CMake使用Qt gcc.exe和g ++。exe它也使用了我新安装的MinGW中的一些东西。可能是因为我急切地将每个目录添加到我的PATH变量中。我真是个傻瓜!
  5. CMake无法生成任何有用的文件,因此我放弃并安装了OpenCV superpack,希望这会让事情变得更容易。 我花了好几个小时想知道为什么来自superpack的Qt和OpenCV没能正常工作。我从来没有完全理解。我遇到了其他用户在此处描述的相同错误,例如一旦包含OpenCV,控制台程序就会崩溃。奇怪的是,我可以从FileExplorer手动启动可执行文件(我添加了你能想到的所有.dll到项目文件夹:opencv_core242.dll,opencv_highgui242.dll,QtCore4.dll,QtGui4.dll等等...... )但是我无法在Qt Creator环境中启动我的小测试程序。
  6. 我分析了我的DLL是否存在使用depends.exe的问题,并发现即使我使用MinGW编译器将所有内容配置为DEBUG,我的程序仍然尝试使用QtCore4.dll而不是QtCore4d.dll。 ..所以我最好的猜测是,它混合了调试和发布版本。
  7. 我放弃使用superpack并再次尝试使用CMAKE,然后使用Qt MinGW版本构建OpenCV并确保为调试模式设置所有内容并启用QT选项。但到目前为止没有运气
  8. 我停止使用MinGW并切换到MSVC2010,效果更好。但是我仍然无法调试程序,因为MSVC2010调试器引擎似乎缺失了。我真的不知道如何手动添加这个,但我还在努力
  9. 所以我可以肯定的是,对于经验不足的人来说,使用Qt和OpenCV远非琐事!

答案 1 :(得分:2)

你应该从源代码构建OpenCV,就像你已经做到的那样,没有麻烦。请注意,最新版本的OpenCV可以使用Qt构建,而不是Qt。 Highgui可选择使用Qt!如果您使用或不使用Qt进行构建,这是您的选择。

我将Qt库与OpenCV一起使用了很长时间。我从来没有去过SDK,而是使用了为相应的VS版本构建的库。见这里:http://qt.nokia.com/downloads/downloads#qt-lib

您可以将它用于VS2008和VS2010,但早期版本也可用于VS2005。 Visual Studio的旧版本很难吸收,为什么还要使用它们。

然后我从来没有遇到过在CMake项目中将它拉到一起的问题。它遵循:

find_package(OpenCV)
find_package(Qt4 ${VOLE_MINIMUM_QT_VERSION} COMPONENTS QtCore QtGui)
find_package(Qt4 ${VOLE_MINIMUM_QT_VERSION} COMPONENTS QtOpenGL)

...

qt4_wrap_cpp(moc_sources ${vole_module_moc_sources})
qt4_wrap_ui(uic_sources ${vole_module_ui_sources})
qt4_add_resources(rcc_sources ${vole_module_rcc_sources})

你知道,通常的东西。

五个星期之后你可能会在Windows下运行它,而在GNU / Linux下它是shell中的三个命令。

答案 2 :(得分:2)

您可以更轻松地使用OpenCV配置Qt Creator。 This post展示了如何逐步实现这一目标!它还显示了几个屏幕截图,以帮助完成此过程。

相关问题