如何使用ENABLE_BITCODE编译OpenCV iOS
当我尝试使用XCode 7 + iOS SDK 9编译我的XCode项目与OpenCV 2.4 iOS时,XCode抱怨说
ld:'opencv2.framework / opencv2(alloc.o)'不包含位码。 您必须使用位代码重新启动(Xcode设置ENABLE_BITCODE),从供应商获取更新的库,或者禁用此目标的位代码。 为架构arm64
铿锵声:错误:链接器命令失败,退出代码1(使用-v来查看调用)
并拒绝链接。 谷歌search后, 事实certificate是因为苹果在App Store中添加了一个名为Bitcode的新function,用于应用程序优化。 虽然OpenCV iOS二进制文件没有被更新为包含位码,但它不能通过链接阶段。
有些引用指出了一个临时的解决scheme来禁用ENABLE_BITCODE
所以链接可以在没有Bitcode的情况下完成。 这将阻止应用程序被编译为Apple Watch,因为Bitcode对于Watch应用程序是必需的。 因此,我的问题是,是否有一些(最简单的)方法来编译启用Bitcode的iOS OpenCV? (更好的编译框架下载链接)
经过一番search和试用后,我想出了一个用Bitcode从源代码编译OpenCV iOS的方法。 编译后的二进制文件也在这里提供: [v3.0] [v2.4] 。 [免责声明:我不负责编译的二进制文件的完整性。 使用风险自负。]
编译步骤与官方文档基本相同,只需一步。
-
用git下载代码:
cd ~/<my_working_directory>
git clone https://github.com/Itseez/opencv.git
-
为Xcode制作符号链接让OpenCV编译脚本find编译器,头文件等
cd /
sudo ln -s /Applications/Xcode.app/Contents/Developer Developer
-
[关键步骤]更改编译脚本以添加Bitcode:
~/<my_working_directory>/opencv/platform/ios/build_framework.py
的额外选项,并find包含-DCMAKE_C_FLAGS
的行。 添加-fembed-bitcode
的标志。 例如,在我得到的源代码中,它是55行,看起来像"-DCMAKE_C_FLAGS=\"-Wno-implicit-function-declaration -fembed-bitcode\" " +
改变之后。 [参考文献]
-
构buildOpenCV框架:
cd ~/<my_working_directory>
python opencv/platforms/ios/build_framework.py ios
如果一切正常,几分钟后你会得到
~/<my_working_directory>/ios/opencv2.framework
。 您可以将此框架添加到您的Xcode项目。
PS问一个问题,即使你已经知道这个答案是根据这个post Meta Stackchange鼓励。
OpenCV恰恰是那种软件(以及audio和video编解码器),很可能会有手动的ARM NEON优化。 文档表明〜40个函数在OpenCV3.0中有过这种处理。
如果编译LLVM位代码,您将获得通用(较less优化,用C或C ++实现)版本。
Bitcode的使用是可选的 – 除非编译Apple Watch,否则很难想象您会运行复杂的计算image processing。 如果您正在捆绑手表应用程序,请仅覆盖其上的位代码的构build设置。