无法为架构arm64和x86_64构建opencv ios框架

我在编译ios框架时遵循iOS中的opencv安装文档安装 。 但是,如果我没有更改platform/ios/build_framework.py并构建框架,我将platform/ios/build_framework.py以下错误:

 build settings from command line: ARCHS = x86_64 IPHONEOS_DEPLOYMENT_TARGET = 6.0 SDKROOT = iphonesimulator6.1 Build Preparation Build task concurrency set to 8 via user default IDEBuildOperationMaxNumberOfConcurrentCompileTasks === BUILD AGGREGATE TARGET ZERO_CHECK OF PROJECT OpenCV WITH CONFIGURATION Release === Check dependencies === BUILD NATIVE TARGET zlib OF PROJECT OpenCV WITH CONFIGURATION Release === === BUILD NATIVE TARGET libjpeg OF PROJECT OpenCV WITH CONFIGURATION Release === ** BUILD FAILED ** Build settings from command line: ARCHS = x86_64 IPHONEOS_DEPLOYMENT_TARGET = 6.0 SDKROOT = iphonesimulator6.1 === BUILD NATIVE TARGET zlib OF PROJECT OpenCV WITH CONFIGURATION Release === Check dependencies No architectures to compile for (ONLY_ACTIVE_ARCH=YES, active arch=x86_64, VALID_ARCHS=i386). ** BUILD FAILED ** 

然后,经过多次尝试,我发现如果我只通过改变platform/ios/build_framework.py的以下脚本来编译架构armv7,armv7s和i386,那么框架就可以成功构建。

 targets = ["iPhoneOS", "iPhoneOS", "iPhoneSimulator"] #"iPhoneOS", "iPhoneSimulator" archs = ["armv7", "armv7s", "i386"]#"arm64", , "x86_64" for i in range(len(targets)): build_opencv(srcroot, os.path.join(dstroot, "build"), targets[i], archs[i]) 

关于如何编译arm64和x86_64架构的任何想法? 谢谢。

取出i386并编译armv7,armv7s和arm64–这些是Xcode for 64位的架构选项 – iphone5s。

不要混合他们不会和不能混合的英特尔和arm规范。 架构命令用于通知编译器如何创建目标代码。 因为intel是CISC处理器而arm是RISC内部,它们的目标代码是非常不同的。 例如,MOVE命令可以为英特尔生成x’80’代码(命令指令),但为ARM生成x’60’。 据我所知,i386是旧的英特尔32位架构,Xcode可能会有一些神奇的function,可以在intel和RISC上运行通用目标代码 – 如果这样做的话 – 它将不会有效,它总是会更好编译到特定的体系结构。

32位,64位128 …..是寻址模式 – 它们也是处理器寄存器的大小,并决定CPU可以访问多少内存(RAM)。 通常,除了具有巨大RAM的能力之外,更高位处理器通常会减少执行特定任务的指令数量。

由于通常内置向下兼容性,因此为armv6编译的应用程序通常在兼容模式下以armv7或arm64运行,但它无法利用运行真正的64位应用程序的优势。

目标是更高级别的规范,它指定可以使用哪些命令,例如iPad具有UIPopViewController,但iPhone或iPod touch不支持。

最后一件事 – 只有iPhone 5s可以与arm64配合使用,如果你设置另一个目标,它可能会将arm64标记为不可选。

因此,如果您正在编译x86_64架构,那就是OS X(笔记本电脑或Mac塔),而不是iOS(iPad,iPhone)。

你在用什么? 我认为不是Xcode吗?

您不需要编译到x86_64,除非您希望它在64位Mac笔记本电脑或台式机上运行……并且您似乎不想通过您的问题尝试这样做?

此外,如果你有它用于i386它可能与大多数OS X机器兼容 – 它将只运行32位而不是64位。

至于arm64,也可能是64位。 你可能没有64位的库? 你的机器是64位运行的吗? 检查opencv库(动态或静态?)并查看它们是32还是64? 如果它们是32位那么那就是问题所在。 您需要将它们构建为64位库或查找它们。 我不知道你不知道你在哪个平台上的信息。

我最近了解到OpenCV for iOS已被添加到CocoaPods中 。 你可以在这里看到podspec和Github存储库。 使用CocoaPods,您可以在项目的根目录中创建名为Podfile的文件并粘贴到以下行:

 pod 'OpenCV' 

保存文件并从终端运行pod install (假设当然安装了CocoaPods)。

我在iPhone 5S上运行,也是64位。

Interesting Posts