C++ openCV 2.4.3 iOS框架编译器识别某些c++;标题

C++ openCV 2.4.3 iOS框架编译器识别某些c++;标题,c++,ios,xcode,opencv,C++,Ios,Xcode,Opencv,openCV 2.4.3/Xcode 4.5.2/mac osx 10.8.2 我正在尝试让openCV与iOS一起工作。我正在尝试使用openCV.org中预构建的2.4.3框架。但是,我得到以下XCODE项目生成错误,这表明编译器不知道它正在处理C++,例如 #include <list> !'list' file not found namespace cv !unknown type name 'namespace' 如果我将该行注释掉,则下

openCV 2.4.3/Xcode 4.5.2/mac osx 10.8.2

我正在尝试让openCV与iOS一起工作。我正在尝试使用openCV.org中预构建的2.4.3框架。但是,我得到以下XCODE项目生成错误,这表明编译器不知道它正在处理C++,例如

#include <list>       !'list' file not found

namespace cv          !unknown type name 'namespace'
如果我将该行注释掉,则下一行会出现错误:

namespace cv          !unknown type name 'namespace'
<> P>显然,编译器不承认这是一个C++头,即使它是后缀<代码> .HPP

opencv2/video/video.hpp中
如果我删除

#include "opencv2/video/background_segm.hpp"
我也可以用
video.hpp
构建(尽管我猜在实践中它是不可用的)

不幸的是,我仍然不能让冲浪工作。当我运行项目时,它会因以下错误而崩溃:

OpenCV错误:函数/功能未实现(OpenCV是在不支持SURF的情况下生成的)

这在
遗留/功能2d.cpp中触发:

   Ptr<Feature2D> surf = Algorithm::create<Feature2D>("Feature2D.SURF");
   if( surf.empty() )
        CV_Error(CV_StsNotImplemented, "OpenCV was built without SURF support");
Ptr surf=算法::创建(“Feature2D.surf”);
if(surf.empty())
CV_错误(CV_stsnotimmented,“OpenCV是在没有SURF支持的情况下构建的”);
问题仍然是

    < >我如何说服编译器<代码> BeaBeSt*SeM.HPP是合法的C++头?<李>
  • 如何启用冲浪支持

我现在一切正常。在对openCV.org上提供的预构建iOS库没有任何乐趣之后,这就是我所做的

  • 从gitHub存储库的克隆编译openCV for iOS。运行
    build\u framework.py
    (在发行版的
    ios
    文件夹中),指向您选择的输出目录。一定要有一份最新的CMake,否则你会像我一样被绊倒

  • 您的输出文件夹最终将包含两个子文件夹,
    build
    opencv2.framework
    。将后者拖到Xcode项目中

项目前缀.pch
文件中添加以下行

#ifdef __cplusplus
#import <opencv2/opencv.hpp>
#endif
我正在使用的代码使用SURF的C接口(例如
cvExtractSURF
),因此在调用这些函数之前,我们还需要添加这一行:

   cv::initModule_nonfree();

我的问题的另一部分,如何强制XCODE编译为C++,是有点麻烦的事(与我正在使用的OpenCV构建必须有一些兼容性问题),并且不再需要这个解决方案。但是,答案是首先,重命名.m files.mm(对于objective-C++)或.cpp(对于纯C++)……但是如果这不起作用,您可以通过更改“文件类型”在文件检查器中强制解决该问题

更新

您还需要注意,在使用OpenCV框架的任何项目中,C++标准库都被正确设置。较旧版本的openCV(to.2.4.2)需要

libstdc++
,较新版本(2.4.3+)需要
libc++
。详情如下:

更新2

openCV现在与CoCoapod一起安装。引用

OpenCV在Cocoapods上可用。在pod文件中添加一行:pod'OpenCV'。很简单


“很简单”。。。考虑到我们之前遇到的所有麻烦,可能是对[去年]的轻描淡写…

openCV实现类只是将.m添加到.mm作为实现文件

#import <UIKit/UIKit.h>
#import <opencv2/opencv.hpp>

@interface ViewController : UIViewController

@end
#导入
#进口
@界面ViewController:UIViewController
@结束

MM文件运行在iOS中的C++编译器中,所以它不显示错误。

@ PosikAbOT,查看几个(小)示例项目。包括框架。
   cv::initModule_nonfree();
#import <UIKit/UIKit.h>
#import <opencv2/opencv.hpp>

@interface ViewController : UIViewController

@end