web-dev-qa-db-ja.com

Visual Studio 2012のWindows 8でOpenCV 2.4.6をビルドする際の 'min(&max)not st member of std'エラー

Visual Studio 2012のWindows 8でOpenCV 2.4.6を構築しようとしています。 https://github.com/Itseez/opencv からソースをダウンロードした後、次を使用して生成します(デフォルト構成のまま) cmakeを実行し、結果のファイルをロードしますALL_BUILD.vcxprojをVisual Studio 2012に追加します。その後、ビルドを試みます。いくつかのモジュールは実際にビルドします(たとえば、core、flann、imgprocなど)。しかし、コードをデバッグするためにPDBファイルを使用できるようにhighguiをビルドしようとしています(ビデオファイルを開くことができません)。ビルドエラーは、これと多くの同様のエラーで始まります。

エラーC2039: 'max': 'std'のメンバーではありませんC:\ OpenCV2.4.6\3rdparty\openexr\Imath\ImathMatrixAlgo.cpp 1094 1 IlmImf

このようなエラー(たとえば、 this answer )の1つの修正は、#include <algorithm>失敗したファイル。私はいくつかのファイルでそれを試しましたが、うまくいくようですが、人気のあるライブラリのソースをローカルで変更するのは不安です。 Windows上でビルドする必要があります(PDBファイルではなくバイナリを OpenCV sourceforgeサイト からダウンロードできます)。そのため、ソースを変更せずにマシン上でビルドする方法を理解したいと思います。

構成ステップで何か不足していますか?マシンにパス設定などがありませんか?これらのエラーが発生するのはなぜですか?どのように修正する必要がありますか?

==========編集==========

ディレクトリパスを見ると、これはサードパーティの依存関係の1つであるOpenEXRの問題のようです。見る Githubで OpenCV 2.4.6で使用されているのはOpenEXRのバージョン1.7.1のようです。 OpenCVのクイックスタートの指示 Windowsへのインストール 状態:

  • Eigenライブラリの場合、これもダウンロードの場合であり、D:/ OpenCV/depディレクトリに抽出されます。
  • OpenEXRで上記と同じ。

OpenEXR 1.7.1ソースコードリリース をダウンロードし、ディレクトリopenexr-1.7.1 into C:\OpenCV2.4.6\dep

それからcmakeを実行し、結果のVisual Studioソリューションをビルドしようとしました。残念ながら、同じエラーが表示されます。

20
dumbledad

OpenEXRのコンパイル中に私は同じ問題につまずいた。次に、 openexr std :: min のグーグルソリューションを見つけました。

OpenCVで開かれた問題 があり、VS2013プレビューを使用する場合は、#include <algorithm>使用しているファイル内のstd::minおよびstd::max

これらのメソッドが呼び出されるファイルにその行を追加します。コンパイルに成功しました。

79
Shodan

おそらく#define NOMINMAX。他のインクルードの前に置いてみてください。
それが役立つ場合は、プロジェクトのプリプロセッサ定義に入れます。

これについては多くの情報があります。NOMINMAXを検索してください。 これについての1つの投稿があります

8
Adi Shavit