当我尝试使用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? (更好地使用编译框架的下载链接)
答案 0 :(得分:18)
经过一番搜索和试用,我找到了一种从Bitcode源码编译OpenCV iOS的方法。此处还提供了已编译的二进制文件:[v3.0] [v2.4]。 [免责声明:我不负责编译二进制文件的完整性。使用风险自负。]
编译步骤与official document基本相同,只需要一步。
使用git:
下载代码 cd ~/<my_working_directory>
git clone https://github.com/Itseez/opencv.git
为Xcode创建符号链接,让OpenCV构建脚本找到编译器,头文件等。
cd /
sudo ln -s /Applications/Xcode.app/Contents/Developer Developer
[关键步骤] 更改编译脚本以添加Bitcode的额外选项:编辑~/<my_working_directory>/opencv/platform/ios/build_framework.py
,并找到包含{{的行1}}。添加-DCMAKE_C_FLAGS
的标记。例如,在我得到的来源中,它的第55行,看起来像
-fembed-bitcode
。 [ref]
构建OpenCV框架:
"-DCMAKE_C_FLAGS=\"-Wno-implicit-function-declaration -fembed-bitcode\" " +
cd ~/<my_working_directory>
如果一切都很好,几分钟后你会得到python opencv/platforms/ios/build_framework.py ios
。您可以将此框架添加到Xcode项目中。
P.S。提问,即使你已经知道根据Meta Stackchange上的this post得到了答案。
答案 1 :(得分:7)
OpenCV正是那种可能具有手动ARM NEON优化功能的软件(以及音频和视频编解码器)。 documentation表明在OpenCV3.0中有~40个函数已经进行了这种处理。
如果编译LLVM位代码,您将获得通用(不太优化,在C或C ++中实现)版本。
Bitcode的使用是可选的 - 除了为Apple手表编译时,很难想象你无论如何都会进行计算复杂的图像处理。如果您要捆绑手表应用,请仅覆盖bitcode的构建设置。