2014-01-13 87 views
6

我試圖構建OpenCVversion 2.4.8以與CodeBlocksMinGw一起使用它。我遵循here的指示。但我得到了以下錯誤。我不知道如何解決它。我沒有發現任何有用的網絡搜索。在此範圍內未聲明構建OpenCV :: MonitorFromRect時出錯

This也沒有解決。

我不想惹openCV代碼,我打算在我的項目中使用OpenCV,這是我第一次使用它。

[ 26%] Built target pch_Generate_opencv_highgui 
[ 26%] Building CXX object modules/highgui/CMakeFiles/opencv_highgui.dir/src/window_w32.cpp.obj 
C:\Program Files (x86)\opencv\sources\modules\highgui\src\window_w32.cpp: In function 'void cvSetModeWindow_W32(const char*, double)': 
C:\Program Files (x86)\opencv\sources\modules\highgui\src\window_w32.cpp:477: error: 'MonitorFromRect' was not declared in this scope 
C:\Program Files (x86)\opencv\sources\modules\highgui\src\window_w32.cpp: In function 'LRESULT MainWindowProc(HWND__*, UINT, WPARAM, LPARAM)': 
C:\Program Files (x86)\opencv\sources\modules\highgui\src\window_w32.cpp:1355: error: 'MonitorFromRect' was not declared in this scope 
mingw32-make.exe[2]: *** [modules/highgui/CMakeFiles/opencv_highgui.dir/src/window_w32.cpp.obj] Error 1 
mingw32-make.exe[1]: *** [modules/highgui/CMakeFiles/opencv_highgui.dir/all] Error 2 
mingw32-make.exe: *** [all] Error 2 

我試圖手動將函數的原型包含在文件中,但後來發現鏈接錯誤。
任何人都可以告訴我這裏可能出了什麼問題嗎?我該如何解決它?

+0

你運行的是什麼版本的OpenCV?在過去的幾周裏,在mingw支持方面出現了一些變化/戰爭,你可能想要更新到最新版本(2.4.8)。 – berak

+0

@berak編輯,我只使用2.4.8。 – Dipto

+0

看起來例如[這裏](https://github.com/Itseez/opencv/commit/734bf8babd1b365401bda9c0ab33ee8cbd780254#diff-baec79d9f6cf2a8b605a5d9aad326540),看看我的意思 – berak

回答

9

看來最近提交的所有更改都不會反映在您的結帳中。要解決此問題,進行以下修改:

modules/highgui/src/precomp.hpp,添加+標記線:

#if defined WIN32 || defined WINCE 
+ #if !defined _WIN32_WINNT 
+  #ifdef HAVE_MSMF 
+   #define _WIN32_WINNT 0x0600 // Windows Vista 
+  #else 
+   #define _WIN32_WINNT 0x0500 // Windows 2000 
+  #endif 
+ #endif 
+ 
     #include <windows.h> 

而且在modules/highgui/src/window_w32.cpp,除去-標線:

#if defined WIN32 || defined _WIN32 

-#define COMPILE_MULTIMON_STUBS // Required for multi-monitor support 
-#ifndef _MULTIMON_USE_SECURE_CRT 
-# define _MULTIMON_USE_SECURE_CRT 0 // some MinGW platforms have no strncpy_s 
-#endif 
- 
-#if defined SM_CMONITORS && !defined MONITOR_DEFAULTTONEAREST 
-# define MONITOR_DEFAULTTONULL  0x00000000 
-# define MONITOR_DEFAULTTOPRIMARY 0x00000001 
-# define MONITOR_DEFAULTTONEAREST 0x00000002 
-# define MONITORINFOF_PRIMARY  0x00000001 
-#endif 
-#ifndef __inout 
-# define __inout 
-#endif 
- 
    #ifdef __GNUC__ 
    # pragma GCC diagnostic ignored "-Wmissing-declarations" 
    #endif 

    #include <commctrl.h> 
-#include <winuser.h> 
    #include <stdlib.h> 
    #include <string.h> 

這將解決構建錯誤。

-1

我有完全相同的問題,並在文件winuser.h快速瀏覽後,我就知道這是怎麼回事,並在命令行中添加必要的宏CFLAGSCXXFLAGS

CFLAGS=-D_WIN32_WINNT=0x0500 CXXFLAGS=-D_WIN32_WINNT=0x0500 make

但是,問題仍未解決。添加VERBOSE=1顯示自定義CFLAGSCXXFLAGS根本沒有生效。這很奇怪,我認爲它應該與我的環境有關,但我仍然無法弄清楚。無論如何,@Rajdhar的答案解決了我的問題,謝謝。

+1

它*不是*答案。也許你應該自己提出一個新問題。 – songyuanyao

0

當使用mingw32和TBB庫構建OpenCV 3.0.0 RC1時,我遇到了同樣的問題。

來自Rajdhar的修復已包含在precomp.h文件中。但是,由於在使用TBB庫構建OpenCV時需要額外包含觸發同樣的問題。

我暫時通過移動通過Rajdhar表示該文件在較早點_WIN32_WINNT的定義解決了問題,以前的OpenCV /核心包括:

#ifndef __HIGHGUI_H_ 
#define __HIGHGUI_H_ 

#include "opencv2/highgui.hpp" 

// MOVED UP 
#if defined WIN32 || defined WINCE 
    #if !defined _WIN32_WINNT 
     #ifdef HAVE_MSMF 
      #define _WIN32_WINNT 0x0600 // Windows Vista 
     #else 
      #define _WIN32_WINNT 0x0500 // Windows 2000 
     #endif 
    #endif 

    #include <windows.h> 
    #undef small 
    #undef min 
    #undef max 
    #undef abs 
#endif 
// END MOVED 

#include "opencv2/core/utility.hpp" 
#include "opencv2/core/private.hpp" 

#include "opencv2/imgcodecs.hpp" 

#include "opencv2/imgproc/imgproc_c.h" 
#include "opencv2/imgcodecs/imgcodecs_c.h" 
#include "opencv2/highgui/highgui_c.h" 

#include <stdlib.h> 
#include <stdio.h> 
#include <string.h> 
#include <limits.h> 
#include <ctype.h> 
#include <assert.h> 

// MOVED FROM HERE 

#ifdef HAVE_TEGRA_OPTIMIZATION 
#include "opencv2/highgui/highgui_tegra.hpp" 
#endif