OpenCV.Framework不为armv7s架构编译

You*_*sef 17 iphone opencv ios xcode4.5

我正在使用openCV框架开发iphone应用程序.一切都很好.然而,最近随着iOS 6和XCode 4.5的发布我将我的项目迁移到XCode 4.5构建时我遇到了这个错误:

ld:文件是通用的(2个切片),但不包含(n)armv7s切片:/Users/jobs/iPhone_Client/workspace/MyProject/third-party/OpenCV.framework/OpenCV用于体系结构armv7s clang:错误:链接器命令失败退出代码1(使用-v查看调用)

**建筑失败**

以下构建命令失败:Ld build/MyProject.build/Debug-iphoneos/MyProject.build/Objects-normal/armv7s/MyProject normal armv7s(1 failure)

据我所知,这是由于新的armv7s架构.OpenCV显然不是用armv7编译的.

我该如何解决这个问题?

我在哪里可以找到与armv7s架构兼容的框架的新版本?

如果没有可用的兼容框架,有没有办法获得源代码并创建我自己的库,针对新架构编译?也许一些快速的步骤如何做到这一点?

注意:请注意,我需要armv7s的构建而不是armv7.谢谢

Ham*_*mer 15

这个答案建立在n9986给出的答案之上.正如他所建议的那样,我克隆了找到的存储库

https://github.com/jonmarimba/OpenCV-iOS

当我下载它时,项目内部的几个引用被打破了,这很奇怪,但很容易修复.修复后,它的行为与n9986所描述的完全相同,输出为armv7和armv7s编译的库.然而,出于我的目的,我要求将它们捆绑到一个.framework中,以便它们可以替代我一直在使用的旧框架.

此前我已经下载了最新版本的OpenCV的iOS 这里,花了相当多的时间试图修改其cmake的文件与armv7s支持编译.jonmarimba已经重新构建了xcode项目文件,以消除其cmake依赖关系,这使得更改目标架构变得更加直观.不幸的是,他没有构建与标准openCV构建一样多的库.我为jonmarimba的opencv_world项目添加了一个新目标,opencv_world是标准openCV版本中用于转换为框架的目标.一旦构建了它,我就用它作为标准openCV版本生成的框架文件结构中静态库的替代品.

我创建的框架可以在这里下载.它对我来说非常适合作为我以前的opencv2.framework的替代品.我注意到jonmarimba没有转换opencv_videostab,opencv_stitching或opencv_nonfree的目标.如果您使用其中一个库,我的框架可能不适合您.如果是这种情况,请告诉我,我可以尝试将这些设置为xcode项目中的目标.

更新

要编译其他体系结构,请将包含的xcode项目中的目标体系结构更改为opencv_world库中您喜欢的任何内容.构建之后,找到刚刚构建的库.将opencv_world库重命名为opencv2,并使用opencv_world替换.framework中的库文件.

UPDATE2

OpenCV 2.4.3现在默认编译armv7s支持,因此这些解决方案已经过时.


Nan*_*ali 7

克隆opencv的Xcode项目,并按照README更新opencv git子模块:

https://github.com/jonmarimba/OpenCV-iOS

检查构建设置,确保存在iOS6和armv7.单击构建.您现在应该拥有armv7s兼容的.a文件.我刚试过这个:

$ file libopencv_core.a 
libopencv_core.a: Mach-O universal binary with 2 architectures
libopencv_core.a (for architecture armv7):  current ar archive random library
libopencv_core.a (for architecture cputype (12) cpusubtype (11)):   current ar archive random library
Run Code Online (Sandbox Code Playgroud)

到目前为止,根据我的研究,最后一个条目是armv7s.

编辑:最后一个条目确实是armv7s.我运行了Xcode自己的lipo info命令:

$ xcrun -sdk iphoneos lipo -info libopencv_core.a 
Architectures in the fat file: libopencv_core.a are: armv7 armv7s 
Run Code Online (Sandbox Code Playgroud)