Gri*_*ory 3 c++ xcode opencv ios opencv3.0
我无法使用新版本的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++
Run Code Online (Sandbox Code Playgroud)
这是为什么?我有.mm文件,它应该编译为Objective-C++源代码.
openCV import语句位于Objective-C头文件中,因此暴露给Swift.它应该在实现文件xxx.mm中,这是从Swift隐藏的.如果你移动它,你会发现你的项目编译.
Swift可以桥接到Objective-C,但如果向它公开C++代码,它将失败.您的Objective-C类应该被视为Swift项目和openCV的C++接口之间的包装器接口.Objective-C可以同时使用.从Swift中调用Objective-C方法,然后这些方法可以在xxx.mm实现中使用openCV函数.
这不是openCV2与openCV3的问题.
更新
Grigory指出特定的OpenCV标头是纯Objective-C - 它是openCV的iOS视频接口,因此它应该可以工作.我的设置不正确,因为我的桥接标头是空的.添加 #import "CVWrapper.h"确实打破了构建.
该问题是由openCV标头引起的.cap_ios.h不是纯粹的Objective-C:它导入一个C++文件:
#include "opencv2/core.hpp"
Run Code Online (Sandbox Code Playgroud)
如果C++编译不可用,则该文件被设置为抛出错误
#ifndef __cplusplus
# error core.hpp header must be compiled as C++
#endif
Run Code Online (Sandbox Code Playgroud)
由于你无法控制框架,我无论如何都会采取隐藏我自己的包装器后面的所有标头的方法:不能保证任何openCV头文件都会被C++屏蔽.我假设你想要一个更复杂的包装器来从Swift端访问openCV函数.
这是我在 其他地方详细阐述 的方法,使用openCV和Swift的小样本项目.
更新
在与格里戈里进行一些讨论后,他同意:
我已经做了一个包装器,它的工作原理..似乎没有找到为什么使用opencv2工作,最好使用包装器.
包装规则!在某些情况下看起来有点矫枉过正,但它通常可以帮你省去麻烦.这在混合Objective-C和C++时已经是很好的建议,但在与Swift接口时成为必需.
| 归档时间: |
|
| 查看次数: |
5461 次 |
| 最近记录: |