5

有没有人用 VS 2013 RTM 编译 openCV?我已经尝试在 IlmImf 模块中得到一堆“min不属于命名空间std”“max不属于命名空间std”,并且opencv_features2d没有编译并出现以下错误:

opencv\modules\core\include\opencv2/core/core.hpp(4512):致命错误 C1075:在 '......\modules\features2d\src\features2d_init 的左大括号 '{' 之前找到文件结尾.cpp(187)' 匹配

由于最新的 CMake UI 还不支持使用 2013 构建(至少从 UI 开始,我是菜鸟),我的过程是为 2012 配置 CMake,然后使用 2013 打开生成的解决方案并将编译器升级到 vc12。

通过在“违规”文件中添加标头包含,我能够克服最小/最大错误,但我对上面发布的完整错误感到困惑。

谢谢

更新:

接受的答案提供了在 32 位调试和发布以及 64 位调试中编译 OpenCV 所必需的内容,但现在由于内部编译器错误,编译器无法编译 64 位发布。这很可能是编译器在这一点上的错,但答案仍然是解决了很多问题。

更新 2: 所以 64 位问题原来是自动矢量化器中的一个错误。这是相应的解决方法。

嗨,感谢您提供出色的错误报告。我确认这是编译器优化器中的一个错误。我们将在未来的版本中修复它。

如果您需要源代码解决方法,请在computeOrbDescriptor内的循环中关闭矢量化器:

#pragma 循环(no_vector)

对于 (int i = 0; i < dsize; ++i)

{

   **...**

这让我可以构建 orb.cpp 和 stardetector.cpp。

如果此问题很严重,导致关键业务情况或阻碍您的产品开发或部署,请访问http://support.microsoft.com或致电 1-800-MICROSOFT 寻求帮助。对于 Microsoft 高级客户,请联系您的管理员、您的技术客户经理或您的 Microsoft 高级客户代表。

我正在关闭这个 MSConnect 项目。如果您需要其他任何内容,请随时回复。

谢谢,

Eric Brumer - Microsoft Visual C++ 团队

连接错误可以在这里找到。不幸的是,对此的真正修复被推迟到以后。

4

3 回答 3

7

I've managed to compile OpenCV 2.4.6 on VS2013 RC, but initially it had the same errors as in question. I've opened VS solution and fixed all error in two steps:

1) Replaced (Ctrl+H)

#include \<string\> 

to

#include <algorithm>\n#include <string>

in entire solution (be sure to enable RegExp in replace dialog)

2) In "modules/opencv_features2d/Src/features2d_init.cpp" changed line 184 to:

obj.info()->addParam(obj, "detector", (Ptr<Algorithm>&) obj.detector);

(search for "GridAdaptedFeatureDetector" in this file for other OpenCV versions)

于 2013-09-27T12:24:54.260 回答
4

对于第一个问题:

http://blogs.msdn.com/b/vcblog/archive/2013/06/28/c-11-14-stl-features-fixes-and-break-changes-in-vs-2013.aspx

它被明确地称为:

  • 你必须#include <algorithm>在调用 std::min() 或 std::max() 时。

之前由于 VC++ 库的内部实现会引入<string>这些函数。

于 2013-07-10T04:14:50.040 回答
3

有关内部编译器错误问题的更多信息,请参阅http://code.opencv.org/issues/3273

于 2013-10-31T20:30:34.247 回答