我正在使用 openCV 框架开发一个 iPhone 应用程序。 一切正常。但是最近随着 iOS 6 和 XCode 4.5 的发布,我正在将我的项目迁移到 XCode 4.5 构建时我遇到了这个错误:
ld: file is universal (2 slices) but does not contain a(n) armv7s slice: /Users/jobs/iPhone_Client/workspace/MyProject/third-party/OpenCV.framework/OpenCV for architecture armv7s clang: error: linker command failed with exit code 1 (use -v to see invocation)
** BUILD FAILED **
The following build commands failed: Ld build/MyProject.build/Debug-iphoneos/MyProject.build/Objects-normal/armv7s/MyProject normal armv7s (1 failure)
据我了解,这是由于新的 armv7s 架构所致。 OpenCV 显然不是用 armv7s 编译的。
我该如何解决这个问题?
哪里可以找到兼容armv7s架构的新版框架?
如果没有可用的兼容框架,是否有办法获取源代码并创建我自己的针对新架构编译的库?也许有一些关于如何做到这一点的快速步骤?
注意: 请注意,我需要为 armv7s 而不是 armv7 构建。 谢谢
最佳答案
这个答案建立在 n9986 给出的答案之上。正如他所建议的,我克隆了在
找到的存储库https://github.com/jonmarimba/OpenCV-iOS
当我下载它时,项目中对不同库的几个引用被破坏了,这很奇怪,但它们很容易修复。在修复它们之后,它的行为与 n9986 描述的完全一样,输出为 armv7 和 armv7s 编译的库。然而,出于我的目的,我要求将它们捆绑到一个 .framework 中,以便它们可以替代我一直使用的旧 .framework。
之前我下载了最新版本的 Opencv for ios here并花了很多时间尝试修改他们的 cmake 文件以编译支持 armv7s。 jonmarimba 已经重组了 xcode 项目文件以剥离其 cmake 依赖项,这使得更改目标架构更加直观。不幸的是,他没有构建与标准 openCV 构建一样多的库。我为 jonmarimba 的 opencv_world 项目添加了一个新目标,这是标准 openCV 版本中用于转换为框架的目标。构建完成后,我将其用作标准 openCV 版本生成的框架文件结构中静态库的替代品。
我创建的框架可以下载here .它非常适合我作为我以前的 opencv2.framework 的替代品。但是我确实注意到 jonmarimba 没有转换 opencv_videostab、opencv_stitching 或 opencv_nonfree 的目标。如果您使用这些库之一,我的框架可能不适合您。如果是这种情况,请告诉我,我可以尝试为您将它们设置为 xcode 项目中的目标。
更新
要针对其他架构进行编译,请将包含的 xcode 项目中的目标架构更改为您喜欢的 opencv_world 库的任何架构。建好后,去找刚才建好的库。将 opencv_world 库重命名为 opencv2,并将在 .framework 中找到的库文件替换为 opencv_world。
更新2
OpenCV 2.4.3现在默认使用 armv7s 支持进行编译,因此这些解决方案已过时。
关于iphone - OpenCV.Framework 不为 armv7s 架构编译,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12491046/