如何构建使用 OpenCV 的 XCode 6 iOS 应用程序 - 未定义错误 __cplusplus
Posted
技术标签:
【中文标题】如何构建使用 OpenCV 的 XCode 6 iOS 应用程序 - 未定义错误 __cplusplus【英文标题】:How to build an XCode 6 iOS app that uses OpenCV - Error __cplusplus is not defined 【发布时间】:2015-02-03 23:06:00 【问题描述】:我在使用 OpenCV 运行 xcode 项目时遇到问题。我已按照page 上的说明为 ios 构建 OpenCV 框架。然后我按照这个tutorial 构建了一个测试应用程序。
但是当我尝试构建时,似乎 __cplusplus 没有定义,因为
#ifdef __cplusplus
#import <opencv2/opencv.hpp>
#endif
不执行。
我似乎无法让我的项目编译可以使其工作的 c++ 文件。任何指针将不胜感激。
我已确保我的构建设置知道 .pch 文件,并仔细检查了框架是否已添加。
我使用的是 OS X Yosemite 10.10.1、Xcode 6.1.1,我创建的应用程序类型是单视图应用程序
更新
看起来它正在编译 __cplusplus 块。我在#ifdef 块中#define 一个变量,当我对它进行NSLogged 时,它出现了。好像就是找不到文件了
opencv2/highgui/cap_ios.h
更新 2
除了@NobodyNada 下面关于将 .m 文件更改为 .mm 的评论之外,我还必须更改 import 语句 from
opencv2/highgui/cap_ios.h -> opencv2/videoio/cap_ios.h.
我从@ToyHunter 在这个 SO post 中的回答中发现了这一点。
【问题讨论】:
您是否将需要 OpenCV 的实现文件的文件扩展名更改为.mm
?
刚刚试了一下,还是一样的问题。
您更改的文件的旧名称是什么?另外,您是否尝试在重命名后构建您的项目?
原来是ViewController.m,我改成了ViewController.mm。是的,我清理并重建了。
ViewController.mm
是唯一导入 OpenCV 的文件吗?
【参考方案1】:
您必须将所有导入 OpenCV 的文件的文件扩展名更改为.mm
。 OpenCV 是一个 C++ API,将文件的扩展名更改为 .mm
会将文件中使用的语言更改为 Objective-C++,这样您就可以混合使用 C++ 和 Objective-C。
【讨论】:
我也遇到了类似的问题,不得不在 .mm 文件而不是头文件中声明属性。以上是关于如何构建使用 OpenCV 的 XCode 6 iOS 应用程序 - 未定义错误 __cplusplus的主要内容,如果未能解决你的问题,请参考以下文章
Xcode 5.1 在 64 位模拟器上构建 opencv 失败