如何在Cocoa应用程序中包含OpenCV?

时间:2010-09-28 08:04:24

标签: cocoa xcode opencv

当我使用'命令行工具'c ++ stdc ++模板创建一个xCode项目时,我能够包含和编译opencv头文件并运行一些代码。

但我想在'Cocoa Application'环境中使用OpenCV。使用该模板创建时,我在main.mm中包含OpenCV头时出现编译错误。 (我已将main.m更改为main.mm,'// NSApplicationMain(argc,(const char **)argv);'已注释掉)

其中一个错误是:“只允许在函数内部使用语句表达式”

我认为它有某种编译器版本错误,但是当我比较项目构建设置时,我找不到差异。

您有什么想法/专业知识吗?

6 个答案:

答案 0 :(得分:18)

我遇到了同样的问题,我花了2天时间进行严肃的系统跟踪,正如预期的那样,解决方案非常简单,一个8岁的孩子可以比我更快地找到它。

准备好了吗?

在要使用OpenCV的.mm文件中,您需要在任何其他包含之前执行#include "opencv2/opencv.hpp"。而已!只需将它移动一条线,看着你的问题神奇地消失得比真正将房间捆绑在一起的地毯更快。

这适用于OpenCV 2.2,因此是新的包含文件。此外,如果您的XCode项目使用前缀头文件(在“其他来源”中查找“YourProjectName_Prefix.pch”文件),那么您需要将#include "opencv2/opencv.hpp"放在那里而不是任何其他文件中。

答案 1 :(得分:3)

Ian Charnas的回答是正确的,但我会做出一个修改。

本文有一个更具体的解决方案,并解释了为什么需要这样做。 http://aptogo.co.uk/2011/09/opencv-framework-for-ios/

//在UIKit和Foundation

的#import语句之前添加这个新部分
#ifdef __cplusplus
    #import <opencv2/opencv.hpp>
#endif

答案 2 :(得分:2)

即使您将“main.m”重命名为“main.mm”并将“#include opencv2 / opencv.hpp”移到顶部(在主文件中),预处理器也会先插入cocoa.h,因为预编译头文件的内容类似于“_Prefix.pch”。避免这样的问题 - 删除#import语句或 - 在cocoa.h import语句

上面插入#import语句

答案 3 :(得分:1)

尝试将C -lstdc++添加到Cocoa应用的构建设置中的“其他链接器标记”。

Xcode模板制作的cocoa应用程序默认不会链接包含c ++库的设置。

答案 4 :(得分:1)

  1. 将此添加到.pch文件

    #ifdef __cplusplus
    #import <opencv2/opencv.hpp>
    #endif
    
  2. 别忘了将所有.m文件转换为.mm文件

答案 5 :(得分:0)

您可能会发现使用OpenCV的C API而不是C++ API更容易。您当然可以直接从Objective C调用C API,这样可以让生活变得更轻松。你只是丢失了一些C ++的语法糖,比如默认参数值。