日常iOS开发中,我们基本都可以使用Cocoapod直接进行依赖管理。现在项目中使用到了OpenCV
,我也像往常一样在podfile中添加了pod 'OpenCV'
。感觉这样就行了,但是在项目中还用到了OpenCV
一个额外的模块——OpenCV_contrib
,就有了下面的折腾历程了。
在Cocoapod中寻找
在Cocoapod中我找到了上述的两个库,但是再pod install
中都出现了问题,添加不上去,如果有人使用过这两个可以在评论区说一下。
手动下载和依赖全过程
由于我用Cocoapod的方法没有成功,所以尝试着自己打包,再导入到项目中
下载OpenCV源代码,在里面你可以选择自己需要的版本
下载Opencv_contrib源代码,注意下载的版本应该和你需要的
OpenCV
一样下载Cmake,后面打包framework我们需要这个软件
-
打开Cmake,根据下图的指示配置
将Opencv_contrib源代码目录中的
modules
文件夹中的东西全部复制到Opencv源代码目录中的modules
下-
打开终端执行 (路径名需要自己照看一下,主要是找到
ios/build_framework.py
的路径)- cd ~/<my_working_directory>
- python opencv/platforms/ios/build_framework.py ios
等待打包...(挺久的)
打包完成后就会在你执行build_framework.py的目录先找到
ios
文件,你要的opencv2.framework
就躺在里面了-
随后便可通过下面两种方法
opencv2.framework
- 在项目中的 Target -> General -> Linked Frameworks and libraries 添加
opencv2.framework
- 可以直接拖进项目,不过记得选中
copy items if needed
- 在项目中的 Target -> General -> Linked Frameworks and libraries 添加
其他依赖
根据上面的方法将
opencv2.framework
导入到项目中是还不能用的,command B
走起来会发现Error了
常见错误:
linker command failed with exit code 1 (use -v to see invocation)
如果出现这个恶心的问题,我们需要右键点击Reveal in log
,耐心的去看那一大堆信息。
当时我出现下图的报错
通过
AVCaptureSessionPresetMedium
和CvVideoCamera
初步猜测出我还需要引入AVFoundation.framework
和CoreMedia.framework
。如下图所示:然后再command B
就Build Succeeded
了
注意事项
在我们使用OpenCV的时候要注意CPP的头文件需要先引入,为了方便起见,我们可以在PrefixHeader.pch
中使用下面的形式
#ifndef PrefixHeader_pch
#define PrefixHeader_pch
#ifdef __cplusplus
#import <opencv2/opencv.hpp>
#import "opencv2/face.hpp"
#endif
#ifdef __OBJC__
// ...
#endif
#endif /* PrefixHeader_pch */
结语
本文是笔者的踩坑和当前解决方案,如果大家有更好的方法,欢迎留言~