gpt4 book ai didi

c++ - 无法为体系结构 arm64 和 x86_64 构建 opencv ios 框架

转载 作者:塔克拉玛干 更新时间:2023-11-02 20:07:08 25 4
gpt4 key购买 nike

我在关注一个opencv安装文档Installation in iOS编译ios框架时。但是,如果我没有更改 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 **

然后,经过多次尝试,我发现如果我只针对架构armv7、armv7s和i386进行编译,通过更改platform/ios/build_framework.py中的以下脚本,就可以成功构建框架。

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 的 64 位架构选项 - iphone5s。

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

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

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

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

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

关于c++ - 无法为体系结构 arm64 和 x86_64 构建 opencv ios 框架,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22246726/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com