如何构建使用 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 失败

如何使用 Xcode 5 为 iOS 6 构建? [关闭]

在 XCode 上为 iOS 使用自定义构建的 OpenCV 会产生 ___sincos_stret 未定义符号

在 Xcode 项目中使用 OpenCV 会导致链接器错误

如何在构建 IPA 时修复 Xcode 6.1 错误

如何使用 xcode-select 选择 XCode 3.2.6?