如何使用ENABLE_BITCODE编译OpenCV iOS

时间:2015-09-22 07:05:08

标签: ios xcode opencv bitcode

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

  

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

     

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

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

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

2 个答案:

答案 0 :(得分:18)

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

编译步骤与official document基本相同,只需要一步。

  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,并找到包含{{的行1}}。添加-DCMAKE_C_FLAGS的标记。例如,在我得到的来源中,它的第55行,看起来像

    -fembed-bitcode

    改变后的

    [ref]

  4. 构建OpenCV框架:

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

    cd ~/<my_working_directory>

    如果一切都很好,几分钟后你会得到python opencv/platforms/ios/build_framework.py ios。您可以将此框架添加到Xcode项目中。

  5. P.S。提问,即使你已经知道根据Meta Stackchange上的this post得到了答案。

答案 1 :(得分:7)

OpenCV正是那种可能具有手动ARM NEON优化功能的软件(以及音频和视频编解码器)。 documentation表明在OpenCV3.0中有~40个函数已经进行了这种处理。

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

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