我尝试构建OpenCV
version 2.4.8
以将其与CodeBlocks
和MinGw
一起使用。我按照here的说明进行操作。但是我得到了以下错误。我不知道如何解决它。我没有通过网络搜索找到任何有用的东西。
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 :(得分:10)
似乎所有来自最近提交的更改都没有反映在您的结帐中。要解决问题,请进行以下更改:
在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 :(得分:1)
在使用mingw32构建OpenCV 3.0.0 RC1并启用TBB库时,我遇到了同样的问题。
Rajdhar的修复程序已包含在precomp.h文件中。但是,由于在使用TBB库构建OpenCV时,额外的包括再次触发相同的问题。
我暂时通过将Rajdhar指示的_WIN32_WINNT的定义移到文件中的早期点,在opencv / core包含之前暂时解决了这个问题:
#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
答案 2 :(得分:-1)
我遇到了完全相同的问题,在快速浏览文件winuser.h
后,我知道发生了什么,并在命令中向CFLAGS
和CXXFLAGS
添加了必要的宏行:
CFLAGS=-D_WIN32_WINNT=0x0500 CXXFLAGS=-D_WIN32_WINNT=0x0500 make
然而,问题仍然没有解决。添加VERBOSE=1
表示自定义CFLAGS
和CXXFLAGS
根本没有生效。它很奇怪,我认为它应该与我的环境有关,但是,我仍然无法弄明白。无论如何,@ Rajdhar的答案解决了我的问题,谢谢。