2014-01-13 25 views
6

version 2.4.8CodeBlocksMinGwで使用するようにビルドしようとしました。私は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

見てください。 [here](https://github.com/Itseez/opencv/commit/734bf8babd1b365401bda9c0ab33ee8cbd780254#diff-baec79d9f6cf2a8b605a5d9aad326540)、どういう意味ですか? – berak

答えて

9

最近のコミットからのすべての変更がチェックアウトに反映されていないようです。

#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> 

これが解決されます:

#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で、削除-マークされた行:+マークされた行を追加し、modules/highgui/src/precomp.hpp

:問題を解決するには、次のように変更します。ビルドエラー。

-1

私は正確に同じ問題を持っていた、とファイルwinuser.hでチラッ後、私は何が起こっているのを知っていたし、コマンドラインでCFLAGSCXXFLAGSに必要なマクロを追加しました:

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

しかし、この問題は依然として解決されていませんでした。 VERBOSE=1を加えると、カスタムCFLAGSCXXFLAGSはまったく影響を及ぼさないことが示されました。それは厄介で、私はそれが私の環境と関係があるはずだと思っていますが、私はまだそれを理解することができませんでした。とにかく、@ Rajdharの答えは、私の問題を解決した、ありがとう。

+1

それは*答えではありません。たぶんあなたは自分で新しい質問をするべきでしょう。 – songyuanyao

0

mingw32でOpenCV 3.0.0 RC1をビルドし、TBBライブラリを有効にしたときも同じ問題がありました。

Rajdharの修正は、すでにprecomp.hファイルに含まれています。しかし、TBBライブラリを使ってOpenCVをビルドする場合、余分なものが同じ問題を再び引き起こします。

OpenCVの/コアが含まれる前に私が仮に、ファイル内の以前のポイントにRajdharで示さ_WIN32_WINNTの定義を移動して、問題を解決:

#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 
関連する問題