如何使用ENABLE_BITCODE编译OpenCV iOS

gra*_*eot 16 xcode opencv ios bitcode

当我尝试使用XCode 7 + iOS SDK 9使用OpenCV 2.4 iOS编译我的XCode项目时,XCode抱怨说

ld:'opencv2.framework/opencv2(alloc.o)'不包含bitcode.您必须在启用bitcode(Xcode设置ENABLE_BITCODE)的情况下重建它,从供应商处获取更新的库,或禁用此目标的bitcode.对于架构arm64

clang:错误:链接器命令失败,退出代码为1(使用-v查看调用)

并拒绝链接.经过一些谷歌搜索,结果是因为Apple在App Store中添加了一个名为Bitcode的新功能,用于优化应用程序.虽然OpenCV iOS二进制文件尚未更新为包含Bitcode,但它无法通过链接阶段.

一些参考指出了一个禁用的临时解决方案,ENABLE_BITCODE因此可以在没有Bitcode的情况下完成链接.这将阻止为Apple Watches编译应用程序,因为Bitcode对于Watch Apps是强制性的.因此我的问题是,是否有一些(最简单的)方法来编译启用Bitcode的iOS OpenCV?(更好地使用编译框架的下载链接)

gra*_*eot 18

经过一些搜索和试验,我找到了一种从Bitcode源头编译OpenCV iOS的方法.此处还提供了编译的二进制文件:[v3.0] [v2.4].[免责声明:我不负责编译二进制文件的完整性.使用风险自负.]

编译步骤与官方文档基本相同,只有一个额外步骤.

  1. 用git下载代码:

    cd ~/<my_working_directory>

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

  2. 为Xcode创建符号链接,让OpenCV构建脚本找到编译器,头文件等.

    cd /

    sudo ln -s /Applications/Xcode.app/Contents/Developer Developer

  3. [关键步骤]更改编译脚本以为Bitcode添加额外选项:编辑~/<my_working_directory>/opencv/platform/ios/build_framework.py,并找到包含的行-DCMAKE_C_FLAGS.添加标志-fembed-bitcode.例如,在我得到的来源中,它是第55行,并且看起来像

    "-DCMAKE_C_FLAGS=\"-Wno-implicit-function-declaration -fembed-bitcode\" " +

    改变之后.[参考文献]

  4. 构建OpenCV框架:

    cd ~/<my_working_directory>

    python opencv/platforms/ios/build_framework.py ios

    如果一切都很好,几分钟后你就会得到~/<my_working_directory>/ios/opencv2.framework.您可以将此框架添加到Xcode项目中.

PS问一个问题,即使你已经知道,根据Meta Stackchange上的这篇文章,我们已经知道答案了.

  • 我发现新版本的opencv(3.1版)已经在build_framwork.py文件中有-fembed-bitcode标志 (2认同)

mar*_*rko 7

OpenCV正是那种可能具有手动ARM NEON优化的软件(以及音频和视频编解码器).该文件表明〜40个功能有过OpenCV3.0这种待遇.

如果编译LLVM位代码,您将获得通用(更少优化,在C或C++中实现)版本.

使用Bitcode是可选的 - 除了为Apple手表编译时,很难想象你无论如何都会运行计算复杂的图像处理.如果您要捆绑监视应用程序,请仅覆盖bitcode的构建设置.