我想用Windows XP上的opencv使用Qt創建一個gui應用程序。我之前使用過Qt和opencv,但從來沒有在一起。長話短說,我無法獲得與Qt的opencv工作。在Windows上使用Qt和opencv生成問題
就在我搜索的所有論壇上,只有一小段散佈的信息,通常沒有答案,我在這裏總結了我採取的所有步驟。
- 爲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)
誠然,有一個Windows-g++.cmake
文件中的模塊/平臺目錄,但它引用Windows-gcc.cmake
不存在!
有沒有人設法在Windows上構建帶Qt支持的opencv,如果是的話,怎麼樣?
編輯:
的問題肯定是與Qt的來源。我設法生成了一個MinGW makefile,並且該版本一切正常,直到它在src/testlib/qtestsystem.h
中停止,因爲有一個包含QtCore/qelapsedtimer.h
的文件,該文件位於完全不同的目錄中! Qt是否發佈不完整的資源,或者我做錯了什麼?
EDIT2
我的煎熬還在繼續。我清理了一切並重新開始。這一次,甚至沒有嘗試Visual Studio。
- 我下載了最新的Qt庫與源(4.8.1)
- 我下載了最新的MinGW的(2011.11.18)
- 通過CMake我成功創建了一個Makefile文件,以及與MinGW的建造它。我有一些閃亮的新庫(
libopencv_core231
,etv。)。我很高興,但我很快就要慶祝這一點了! - 我下載了最新的Qt SDK(奇怪的是,它是4.8.0,所以我將Qt Creator設置爲使用4.8.1),並創建了一個沒有opencv的測試程序來查看它是否工作。有效!
- 我試過使用opencv,只是閱讀和顯示圖像。它沒有工作。
exited with code -1073741511
- 我試着在Qt Creator之外直接運行
.exe
。它抱怨失蹤libstdc++-6.dll
- 我做了一個搜索,並在我的MinGW安裝(c:\ mingw \ bin,958 KB)和一個在我的Qt安裝(c:\ qt \ mingw \ bin ,793 KB) - 這個命令與Qt捆綁在一起。
- 我試了兩個,通過複製它們在我的
.exe
是相同的文件夾,但都沒有工作。我得到了「程序入口點_ZNSt9exceptionD2Ev不能位於動態鏈接庫libstdC++ - 6.dll中。」既。這是在調試,所以我試圖釋放,我有一個類似的錯誤,沒有找到其他入口點。 - 我搜索了論壇,並且發現了我應該靜態鏈接libstdC++的建議。我在文件
c:\Qt\mkspecs\win32-g++\qmake.conf
的行QMAKE_LFLAGS =
和QMAKE_LFLAGS_DEBUG =
處插入-static-libgcc -static-libstdc++
。即使在重新啓動Qt Creator並重建之後,這根本沒有任何效果。如果我不復制libstdc++-6.dll
,它仍然需要它。
當然,沒有OpenCV的我簡單的測試程序從exe
無需任何libstdc++-6.dll
運行,這樣就意味着我的OpenCV的構建是負責?我想重新構建opencv,但是我找不到涉及libstdC++的任何CMake設置!
這可能是一個線索: 當使用libstdc++-6.dll
文件之一,大約缺少入口點的錯誤中提到QtGui4.dll。我有一個調試版本,所以它應該是QtGui * d * 4.dll,不是嗎?調試和發佈有不同的libstdc++
嗎?無論哪種方式,我試圖建立發佈,但它也沒有工作,同樣的錯誤
在這個星球上有沒有一個人在Windows XP上一起嘗試使用Qt與QtCreator和opencv 2.3併成功?從搜索所有論壇和Qt檔案,我找不到任何人。我已準備好在Linux中進行開發,但無論如何我遲早需要Windows版本。
我試圖抵制黑暗的一面,它竊竊私語忘了Qt,MinGW,g ++,opencv並嘗試在Visual Basic中一起破解一些東西。哦,恐怖!
我不太明白:我需要一些特定的Qt庫來構建一個兼容Qt的opencv嗎?問題是,在Qt 4.6.3和4.8.1中都包含了頭文件,這些頭文件在我從官方Qt站點下載的源存儲庫中不存在。 – vsz 2012-04-07 18:08:48
MinGW解決方案也可以,但問題類似:缺少文件。我之前從未使用過MinGW,所以我不知道'Windows-gcc.cmake'應該是什麼樣子。 – vsz 2012-04-07 18:10:06
我只能描述我做了什麼。我使用OpenCV,Qt庫(不是SDK,尤其是VS)和VS 2008(以及2005年之前)。我不知道爲什麼你有一個丟失的文件問題,因爲我從來沒有遇到它。我也從未嘗試SDK,從未嘗試過mingw。正如我指出的那樣,您是否嘗試構建OpenCV,並且沒有Qt支持?您可以考慮向Qt項目提交錯誤報告。 – ypnos 2012-04-08 23:26:56