如何使用ENABLE_位代码编译OpenCV iOS

如何使用ENABLE_位代码编译OpenCV iOS,ios,xcode,opencv,bitcode,Ios,Xcode,Opencv,Bitcode,当我试图使用XCode 7+iOS SDK 9用OpenCV 2.4 iOS编译我的XCode项目时,XCode抱怨说 劳工处: 'opencv2.framework/opencv2(alloc.o)' 不包含位代码。必须在启用位代码的情况下重新生成它 (Xcode设置ENABLE_BITCODE),从 或禁用此目标的位代码。用于体系结构arm64 叮当声:错误:链接器命令失败,退出代码为1(使用-v查看 调用) 并拒绝联系。在谷歌搜索之后,这可能是因为苹果在app Store中添加了一个名为B

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

劳工处: 'opencv2.framework/opencv2(alloc.o)' 不包含位代码。必须在启用位代码的情况下重新生成它 (Xcode设置ENABLE_BITCODE),从 或禁用此目标的位代码。用于体系结构arm64

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

并拒绝联系。在谷歌搜索之后,这可能是因为苹果在app Store中添加了一个名为Bitcode的新功能,用于应用程序优化。虽然OpenCV iOS二进制文件尚未更新为包含位代码,但它无法通过链接阶段


一些人指出了一个临时解决方案,即禁用
启用\u BITCODE
,这样链接就可以在没有位码的情况下完成。这将阻止为苹果手表编译应用程序,因为手表应用程序必须使用位码。因此,我的问题是,是否有一些(最简单的)方法来编译启用位码的iOS OpenCV?(最好有编译框架的下载链接)

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

编译的步骤基本上与相同,只是多了一个步骤

  • 使用git下载代码:

    cd~/

    git克隆https://github.com/Itseez/opencv.git

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

    cd/

    sudo ln-s/Applications/Xcode.app/Contents/Developer开发者

  • [关键步骤]更改编译脚本以添加位代码的额外选项:编辑
    ~//opencv/platform/ios/build\u framework.py
    ,并找到包含
    -DCMAKE\u C\u标志的行。添加一个
    -fembed bitcode
    标志。例如,在我得到的源代码中,它是第55行,看起来像

    “-DCMAKE\u C\u FLAGS=\”-Wno隐式函数声明-fembed bitcode\”+

    在改变之后

  • 构建OpenCV框架:

    cd~/

    python opencv/platforms/ios/build_framework.py ios

    如果一切正常,几分钟后您将获得
    ~//ios/opencv2.framework
    。您可以将此框架添加到Xcode项目中


  • 附言:问一个问题,即使你已经知道答案是鼓励改变的

    OpenCV正是一种软件(以及音频和视频编解码器),它很可能具有手动手臂霓虹灯优化功能。这表明大约40个函数在OpenCV3.0中进行了这种处理

    如果编译LLVM位代码,您将得到通用(优化程度较低,用C或C++实现)版本


    比特码的使用是可选的——除了为Apple watch编译时,很难想象你会运行复杂的计算图像处理。如果要捆绑手表应用程序,请仅覆盖其上位代码的生成设置

    我发现新版本的opencv(3.1版)在build_framwork.py中已经有了-fembed位代码标志file@CSstudent谢谢你的提醒@grapeot I遵循了与步骤4相同的步骤,但面临着相同的问题。请帮帮我。我可以向您显示日志,但它们超出了字符限制。所以不能在这里发布。@grapeot请参考以下链接。我在这里附上了一个截图。它似乎不适用于python 3,我不得不使用
    python2.7opencv/platforms/ios/build_framework.py ios