如何用ENABLE_BITCODE编译OpenCV iOS



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

ld:"opencv2.framework/opencv2 (alloc.o) '不包含位码。您必须在启用位码的情况下重新构建它(Xcode设置ENABLE_BITCODE),从供应商,或禁用此目标的位码。arm64

clang: error: link command failed with exit code 1(使用-v查看调用)

拒绝链接。在谷歌上搜索后,我发现这是因为苹果在app Store中添加了一个名为Bitcode的新功能来优化应用。虽然OpenCV iOS二进制还没有更新到包含Bitcode,但它不能通过链接阶段。

一些参考文献指出了禁用ENABLE_BITCODE的临时解决方案,因此可以在没有Bitcode的情况下进行链接。这将防止应用程序被编译为Apple Watch,因为Bitcode是Watch应用程序的强制性要求。因此,我的问题是,是否有一些(最简单的)方法来编译启用Bitcode的iOS OpenCV ?(最好有编译框架的下载链接)

经过一番搜索和尝试,我找到了一种用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选项:edit ~/<my_working_directory>/opencv/platform/ios/build_framework.py,并找到包含-DCMAKE_C_FLAGS的行。添加-fembed-bitcode标志。例如,在我得到的源代码中,它是第55行,看起来像

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

    更改后。(ref)

  4. 构建OpenCV框架:

    cd ~/<my_working_directory>

    python opencv/platforms/ios/build_framework.py ios

    如果一切正常,几分钟后你会得到~/<my_working_directory>/ios/opencv2.framework。你可以把这个框架添加到你的Xcode项目中

注:问一个问题,即使你已经知道答案是鼓励根据这篇文章在Meta Stackchange。

OpenCV正是一种软件(连同音频和视频编解码器),很可能有手工制作的ARM NEON优化。文档表明,在OpenCV3.0中有大约40个函数有这种处理。

如果编译LLVM位码,你会得到通用版本(优化程度较低,在C或c++中实现)。

Bitcode的使用是可选的——除非在编译Apple watch时,很难想象你会运行计算复杂的图像处理。如果你绑定了一个手表应用,只覆盖它的比特码的构建设置。

最新更新