我不能用opencv 3.0.0框架的新版本构建项目(版本2没有这个问题)。Xcode 7不将c++源代码编译为c++。
下面是不构建的最简单的设置:
Objective-C++源和标头并将它们添加到项目中。下面是设置:


编译器是这样说的:
opencv2.framework/Headers/core/base.hpp:49:4: error: base.hpp header must be compiled as C++

为什么会这样呢?我已经得到了.mm文件,它应该编译为目标-C++源代码。
发布于 2015-09-23 11:11:40
openCV导入语句位于Objective头文件中,因此向Swift公开。它应该在实现文件xxx.mm中,这是对Swift隐藏的。如果您移动它,您将发现您的项目编译。
Swift可以连接到Objective,但如果将C++代码公开给它,则会失败。您的目标-C类应该被认为是Swift项目和openCV的C++接口之间的包装接口。目标-C可以与两者一起工作。在Swift中,您可以调用Objective方法,而这些方法又可以在openCV实现中使用xxx.mm函数。
这不是openCV2对openCV3的问题。
更新
格里戈里指出,特定的OpenCV头是纯目标-C-它是iOS视频接口到openCV,所以它应该工作。而且我的设置是错误的,因为我的桥接头是空的。添加#import "CVWrapper.h"确实会破坏构建。
这个问题是由那个openCV头引起的。cap_ios.h不是纯目标-C:它导入一个C++文件:
#include "opencv2/core.hpp"如果C++编译不可用,则设置该文件将引发错误。
#ifndef __cplusplus
# error core.hpp header must be compiled as C++
#endif由于您无法控制框架,所以无论如何,我都会采用将所有头隐藏在自己的包装后面的方法:不能保证任何openCV头文件都不会受到C++的屏蔽。我假设您需要一个更精细的包装器来访问Swift方面的openCV函数。
这是I 有 详细阐述 其他地方,使用使用openCV和Swift的小型示例项目的方法。
更新
在与格里戈里进行了一些讨论之后,他同意:
我做了个包装纸,它能用..与其找出使用opencv2构建的原因,不如使用包装器。
包装规则!在某些情况下,这看起来可能有点过分,但它通常会为您省去麻烦。这已经是一个很好的建议,当混合目标C和C++,但成为必要时,与Swift接口。
https://stackoverflow.com/questions/32735545
复制相似问题