26

我正在尝试在 Visual Studio 2012 中的 Windows 8 上构建 OpenCV 2.4.6。从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 上构建(您可以从OpenCV sourceforge 站点下载二进制文件,但不是 PDB 文件)所以我想了解如何在不更改源代码的情况下在我的机器上构建它。

我在配置步骤中遗漏了什么吗?我的机器上是否缺少某些路径设置等?为什么我会收到这些错误,我应该如何修复它们?

========== 编辑 ==========

查看目录路径,这似乎是第 3 方依赖项之一 OpenEXR 的问题。在 Github 上看,它似乎是 OpenCV 2.4.6 中使用的 OpenEXR 版本 1.7.1。OpenCV's Quick Start Installation on Windows状态中的说明:

  • 对于 Eigen 库,再次下载并解压到 D:/OpenCV/dep 目录。
  • 与上面的 OpenEXR 相同。

所以我下载了OpenEXR 1.7.1 源代码版本并将生成的文件解压缩openexr-1.7.1C:\OpenCV2.4.6\dep.

然后我运行 cmake 并尝试构建生成的 Visual Studio 解决方案。可悲的是,我看到了同样的错误。

4

3 回答 3

90

我在编译 OpenEXR 时遇到了同样的问题。然后我在谷歌上找到了openexr std::min的解决方案。

OpenCV上打开了一个问题,它说,在使用 VS2013 Preview 时,您必须#include <algorithm>在正在使用的文件中添加该行std::minstd::max.

我将该行放入调用这些方法的文件中,瞧!编译成功。

于 2013-10-27T20:18:36.497 回答
9

你可能需要#define NOMINMAX. 尝试将它放在任何其他包含之前。
如果这有帮助,则放入您项目的预处理器定义。

有很多关于此的信息,只需搜索 NOMINMAX。这是一篇关于它的文章

于 2013-10-19T13:29:30.773 回答
1
#include <iostream> 
#include <algorithm>

只需在 cpp 文件中包含以上 2 行,编译错误就会消失。

于 2020-10-25T14:49:26.683 回答