我修改了以下内容以使其构建,尽管目前我还没有 arm64 iOS 设备来测试。
编辑:我也必须关注https://stackoverflow.com/a/17025423/1094400
假设“opencv”是包含来自 Github 的 opencv 源的文件夹:
在gzlib.c, gzread.c, gzwrite.c的每个opencv/3rdparty/zlib/中添加:
#include <unistd.h>
在现有包含之后的顶部。
另外打开opencv/platforms/ios/cmake/Modules/Platform/iOS.cmake并将第88行从:
set (CMAKE_OSX_ARCHITECTURES "$(ARCHS_STANDARD_32_BIT)" CACHE string "Build architecture for iOS")
到:
set (CMAKE_OSX_ARCHITECTURES "$(ARCHS_STANDARD_INCLUDING_64_BIT)" CACHE string "Build architecture for iOS")
此外,将第 99 行和第 100 行中opencv/platforms/ios/build_framework.py 处的构建脚本更改为:
targets = ["iPhoneOS", "iPhoneOS", "iPhoneSimulator"]
archs = ["armv7", "armv7s", "i386"]
到:
targets = ["iPhoneOS", "iPhoneOS", "iPhoneOS", "iPhoneSimulator", "iPhoneSimulator"]
archs = ["armv7", "armv7s", "arm64", "i386", "x86_64"]
生成的库将包括以下内容:
$ xcrun -sdk iphoneos lipo -info opencv2
Architectures in the fat file: opencv2 are: armv7 armv7s i386 x86_64 arm64
虽然我对opencv/platforms/ios/cmake/Toolchain-iPhoneOS_Xcode.cmake 仍有疑虑,它在第 14 行和第 17 行将数据指针的大小定义为 4。
我猜 64 位应该是 8,所以我没有测试编译的库是否适用于 arm64,如果它不能正常运行,我建议此时进一步调查。