加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

Xcode 7不使用c框架构建项目

发布时间:2020-12-15 01:48:34 所属栏目:百科 来源:网络整理
导读:我无法使用新版本的opencv 3.0.0框架构建项目(版本2没有此问题). Xcode 7不会将c源编译为c. 这是最简单的设置: 从这里下载3.0.0框架http://netix.dl.sourceforge.net/project/opencvlibrary/opencv-ios/3.0.0/opencv2.framework.zip 使用Swift语言创建最简
我无法使用新版本的opencv 3.0.0框架构建项目(版本2没有此问题).
Xcode 7不会将c源编译为c.

这是最简单的设置:

>从这里下载3.0.0框架http://netix.dl.sourceforge.net/project/opencvlibrary/opencv-ios/3.0.0/opencv2.framework.zip
>使用Swift语言创建最简单的ios项目.
>将框架拖放到项目中.
>创建Objective-C源和标头,并将它们添加到项目中.
>创建桥接标头.

这是设置:

enter image description here


enter image description here

>构建.

以下是编译器所说的内容:

opencv2.framework/Headers/core/base.hpp:49:4: error: base.hpp header must be compiled as C++

enter image description here

这是为什么?我有.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"

如果C编译不可用,则该文件被设置为抛出错误

#ifndef __cplusplus
    # error core.hpp header must be compiled as C++
#endif

由于你无法控制框架,我无论如何都会采取隐藏我自己的包装器后面的所有标头的方法:不能保证任何openCV头文件都将被屏蔽.我假设你想要一个更复杂的包装器来从Swift端访问openCV函数.

这是方法I have elaborated elsewhere,具有small sample project using openCV and Swift.

更新

在与格里戈里进行一些讨论后,他同意:

I’ve made a wrapper and it works.. Seems like instead of finding out why did build with opencv2 work it is better to use a wrapper.

包装规则!在某些情况下看起来有点矫枉过正,但它通常可以帮你省去麻烦.这在混合Objective-C和C时已经是很好的建议,但在与Swift接口时成为必需.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读