【问题标题】:Cannot Compile OpenCV 2.4.5 with VS 2013 RTM无法使用 VS 2013 RTM 编译 OpenCV 2.4.5
【发布时间】:2013-07-01 17:09:59
【问题描述】:

有没有人用 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 loop(no_vector)

for (int i = 0; i

{

   **...**

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

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

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

谢谢,

Eric Brumer - Microsoft Visual C++ 团队

可以在here 找到连接错误。不幸的是,这个问题的真正修复被推迟到以后。

【问题讨论】:

  • 目前有进展吗?
  • 还没有。我还没有确定这是 OpenCV 问题还是 vc12 问题。我倾向于后者,因为我查看了有问题的代码,对我来说似乎很好。
  • 第二期有运气吗?我对 VS2013 也有同样的情况。

标签: visual-c++ opencv visual-studio-2013


【解决方案1】:

我已经设法在 VS2013 RC 上编译 OpenCV 2.4.6,但最初它与问题中的错误相同。 我已经打开 VS 解决方案并分两步修复了所有错误:

1) 替换 (Ctrl+H)

#include \<string\> 

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

整个解决方案中(确保在替换对话框中启用 RegExp)

2) 在“modules/opencv_features2d/Src/features2d_init.cpp”中将第 184 行更改为:

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

(在此文件中搜索“GridAdaptedFeatureDetector”以获取其他 OpenCV 版本)

【讨论】:

  • 你在release编译成功了吗?你所做的绝对适用于调试,但在发布时,我在 features2d 中编译 orb.cpp 时出现内部编译器错误。
  • 这很奇怪,因为我在两种配置中都成功编译了它。但是,我在 VS2013RC 下的另一个项目中遇到了内部编译器错误;那个时候重新安装 VS 帮助了我。
  • 有可能。 RTM刚刚发布,所以我会再试一次。感谢您的帮助。
  • 我的 RTM 也失败了。重新安装没有帮助:/
  • @akazahov 好的,我猜你是为 32 位版本编译的?我刚刚尝试了 32 位,效果很好,但是编译 64 位版本时编译器崩溃了。
【解决方案2】:

第一期:

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

它被显式调用:

  • 调用 std::min() 或 std::max() 时必须#include &lt;algorithm&gt;

之前由于 VC++ 库的内部实现,&lt;string&gt; 会引入这些函数。

【讨论】:

  • 感谢第一个问题的文档链接
【解决方案3】:

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2013-05-23
    • 1970-01-01
    • 1970-01-01
    • 2023-04-02
    • 1970-01-01
    • 2013-03-06
    • 2013-12-24
    相关资源
    最近更新 更多