'min (& max) не является членом std' ошибок при построении OpenCV 2.4.6 в Windows 8 для Visual Studio 2012

Я пытаюсь создать OpenCV 2.4.6 в Windows 8 в Visual Studio 2012. Загрузив исходный код из https://github.com/Itseez/opencv я сгенерируйте (оставив конфигурацию по умолчанию) с помощью cmake, а затем загрузите полученный файл ALL_BUILD.vcxproj в Visual Studio 2012. Затем я попытаюсь его создать. Некоторые из модулей действительно строят (например, core, flann, imgproc,...), но я пытаюсь создать highgui, чтобы использовать PDB файл для отладки моего кода (который не может открыть видеофайл). Ошибки сборки начинаются с этой и многих аналогичных ошибок:

ошибка C2039: 'max': не является членом 'std' C:\OpenCV2.4.6\3rdparty\openexr\Imath\ImathMatrixAlgo.cpp 1094 1 IlmImf

Одно исправление таких ошибок (например, в этом ответе) заключается в добавлении #include <algorithm> к файлам с ошибкой. Я пробовал это на нескольких файлах и, похоже, работает, но я нервничаю из-за того, что локально меняю источник популярной библиотеки. Он должен основываться на Windows (вы можете загружать двоичные файлы, но не файлы PDB, из сайта OpenCV sourceforge), поэтому я хотел бы понять как создать его на моей машине без изменения источника.

Я что-то пропустил на этапе настройки? Есть ли какая-то дорожка и т.д., Отсутствующая на моей машине? Почему я получаю эти ошибки и как их исправить?

========== РЕДАКТИРОВАНИЕ ==========

Если посмотреть на путь к каталогу, это будет проблемой с одной из сторонних зависимостей, OpenEXR. Глядя на Github, она выглядит как версия 1.7.1 OpenEXR, которая используется в OpenCV 2.4.6. Инструкции в OpenCV Quick Start Установка в Windows:

  • В случае библиотеки Eigen это снова случай загрузки и извлечения в каталог D:/OpenCV/dep.
  • То же, что и выше с OpenEXR.

поэтому я загрузил версию исходного кода OpenEXR 1.7.1 и извлек полученные файлы, поместив каталог openexr-1.7.1 в C:\OpenCV2.4.6\dep.

Затем я запустил cmake и попытался создать результирующее решение Visual Studio. К сожалению, я вижу те же ошибки.

Ответ 1

Я спотыкался на ту же проблему при компиляции OpenEXR. Затем я нашел решение googling для openexr std:: min.

Существует проблема открытая в OpenCV, где говорится, что при использовании VS2013 Preview вы должны добавить строку #include <algorithm> в файл, в котором вы используете std::min и std::max.

Я помещаю эту строку в файлы, где эти методы вызывают и вуаля! Компиляция прошла успешно.

Ответ 2

Вероятно, вам нужно #define NOMINMAX. Попытайтесь положить его, прежде чем любой другой включает. Если это помогает, тогда укажите, как вы определяете препроцессор проекта.

Там много информации об этом, просто найдите NOMINMAX. Вот одно сообщение об этом.