无法使用VS 2013 RTM编译OpenCV 2.4.5

时间:2013-07-01 17:09:59

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

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

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

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

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

由于

更新

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

更新2: 因此,64位问题被证明是自动矢量化器中的一个错误。这是相应的解决方法。

  

嗨,谢谢你的错误报告。我确认这是编译器优化器中的一个错误。我们将在以后的版本中修复它。

     

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

     

#pragma loop(no_vector)

     

for(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 ++团队

可以找到连接错误here。不幸的是,对此的真正解决方案被推迟到以后的日期。

3 个答案:

答案 0 :(得分:7)

我已经设法在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);

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

答案 1 :(得分:4)

第一期:

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 <algorithm>

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

答案 2 :(得分:3)

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