iOS技术点

iOS opencv.framework太大了怎么办?手把手教你

2019-08-23  本文已影响0人  会飞的大马猴

开发的时候有的项目可能用的opencv,然后我们去官网下载那些已经编译好的opencv,少则100m + 多则200m+,但是我们可能只用了其中的几个方法,很多代码就是没用的了(这里我不知道打成framework以后,还能不能自动删除没用的代码,没去验证,感觉不会),这里教大家如果去裁剪opencv

1.下载cmake

cmake 必不可少, 直接去官网下载mac版本就行 cmake,然后安装就行了

2.opencv的组成

首先我们要知道 opencv 是由好多个模块组成的,下面我们来看一下,究竟是由哪些模块组成

git  clone https://github.com/opencv/opencv.git

或者直接下载zip

ps 我这里用的2.4.13版本,因为这个版本的脚本 比较友好(主要是我google 到了怎么改)

很明显 core 是所有模块都需要依赖的, 那比如说我在开发中可能只用到来imgproc 模块,那我编译的时候只需要编译 core imgproc模块就行了,其实这里还以来了一个 world 模块,还有一些第三方的东西

3.编辑脚本

脚本的目录为 platforms/ios/build_framework.py
这个就是我们需要编辑的脚本

cmakeargs = ("-GXcode " +
                 "-D BUILD_SHARED_LIBS=OFF "+
                 "-D BUILD_opencv_core=ON "+
                 "-D BUILD_opencv_imgproc=ON "+
                 "-D BUILD_opencv_world=ON "+
                 "-D BUILD_opencv_gpu=OFF "+
                 "-D BUILD_opencv_calib3d=OFF "+
                 "-D BUILD_opencv_contrib=OFF "+
                 "-D BUILD_opencv_features2D=OFF "+
                 "-D BUILD_opencv_flann=OFF "+
                 "-D BUILD_opencv_highgui=OFF "+
                 "-D BUILD_opencv_legacy=OFF "+
                 "-D BUILD_opencv_ml=OFF "+
                 "-D BUILD_opencv_nonfree=OFF "+
                 "-D BUILD_opencv_objdetect=OFF "+
                 "-D BUILD_opencv_photo=OFF "+
                 "-D BUILD_opencv_stitching=OFF "+
                 "-D BUILD_opencv_video=OFF "+
                 "-D BUILD_opencv_videostab=OFF "+
                 "-DCMAKE_BUILD_TYPE=Release " +
                 "-DCMAKE_TOOLCHAIN_FILE=%s/platforms/ios/cmake/Toolchains/Toolchain-%s_Xcode.cmake " +
                 "-DCMAKE_INSTALL_PREFIX=install") % (srcroot, target)

可以看到 只有core imgproc world 是ON 其他都是OFF

targets = [("armv7s", "iPhoneOS"),
               ("arm64", "iPhoneOS"),
               ("x86_64", "iPhoneSimulator")]

把没用的指令集干掉,不要模拟器 把x86的干掉

3.执行脚本

cd 到脚本的目录 直接** python build_framework + 输出路径 ** 就行了 ,过一会framework就打好了,我们看到3个指令集只有40m


image.png

PS 遇到编译出错 error: implicit declaration of function 'read' is invalid in C99 ...

找到 3rdparty/zlib 下的3个文件 加入#include <unistd.h>
三个文件分别为gzwrite.c gzread.c gzlib.c

问题一:enum { NO, GAIN, GAIN_BLOCKS }; Expected identifier

只要把NO修改成 NO_EXPOSURE_COMPENSATOR 或 NO_EXPOSURE_COMPENSATOR = 0

问题二:core.hpp header must be compiled as C++ 或 base.hpp header must be compiled as C++

解决:把调用了OpenCV文件的.m文件修改为.mm,以及viewController.m修改为viewController.mm

上一篇 下一篇

猜你喜欢

热点阅读