OpenCV.Framework不能编译为armv7s架构

我正在使用openCV框架的iPhone应用程序。 一切工作正常。 不过最近随着iOS 6和XCode 4.5的发布,我正在将我的项目迁移到XCode 4.5。在构build时,我遇到了这个错误:

ld:文件是通用的(2片),但不包含(n)armv7s片:/Users/jobs/iPhone_Client/workspace/MyProject/third-party/OpenCV.framework/OpenCV架构armv7s clang:error:linker命令失败退出代码1(使用-v来查看调用)

**build立失败**

下面的构build命令失败:Ld build / MyProject.build / Debug-iphoneos / MyProject.build / Objects-normal / armv7s / MyProject正常armv7s(1个故障)

据我了解,这是由于新的armv7s架构。 OpenCV显然不是用armv7编译的。

我该如何解决这个问题?

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

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

注意:只要注意我需要armv7s的构build而不是armv7 。 谢谢

这个答案build立在n9986给出的答案上。 正如他所build议的那样,我克隆了发现的存储库

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

当我下载的时候,项目里的几个参考文件被打破了,这很奇怪,但是很容易修复。 修正后,它的行为与上面描述的n9986完全一样,输出为armv7和armv7编译的库。 然而,为了我的目的,我要求将它们捆绑到一个框架中,以便它们能够替代我一直使用的旧框架。

以前我在这里为ios下载了最新版本的Opencv,并花费了相当多的时间尝试修改它们的cmake文件来编译支持armv7s。 jonmarimba已经重组了xcode项目文件以剥离它的cmake依赖关系,这使得更改目标架构更加直观。 不幸的是,他并没有像标准的openCV构build一样构build更多的库。 我为jonmarimba的opencv_world项目增加了一个新的目标,这个目标是在标准的openCV版本中用来转换成一个框架的目标。 一旦build成了,我将它用作替代标准openCV版本生成的框架文件结构中的静态库。

我创build的框架可以在这里下载。 它对我来说完美的作为替代我以前的opencv2.framework的下降。 但是我注意到,jonmarimba没有转换opencv_videostab,opencv_stitching或opencv_nonfree的目标。 如果你使用其中一个库,我的框架可能不适合你。 如果是这样的话,让我知道,我可以尝试在您的Xcode项目中设置为目标。

更新

要为其他体系结构进行编译,请将包含的xcode项目中的目标体系结构更改为opencv_world库所需的任何内容。 build好之后,去找你刚build的图书馆。 将opencv_world库重命名为opencv2,并使用opencv_worldreplace.framework中find的库文件。

UPDATE2

OpenCV 2.4.3现在编译默认支持armv7s,所以这些解决scheme已经过时了。

克隆opencv的Xcode项目并根据README更新opencv git子模块:

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

检查构build设置,确保存在iOS6和armv7s。 点击构build。 你现在应该有armv7兼容的.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 

到目前为止,最后一篇文章是针对armv7s的。

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

 $ xcrun -sdk iphoneos lipo -info libopencv_core.a Architectures in the fat file: libopencv_core.a are: armv7 armv7s 

你总是可以不瞄准armv7s,而只瞄准armv7。 你的应用程序仍然可以在iPhone 5上正常运行,它不会完全针对新的指令集进行优化。

简而言之,我从这里克隆了源代码并使用本教程进行构build。

然后我得到了armv7,armv7s和模拟器的opencv2.framewok。

说明明显的是,你将需要重新编译和重build库openCV.framework并将其目标为armv7s。

在重build之前调整库“项目设置”和“目标设置”。 祝你好运!

也许有可能用CMake来构build它。 我在一年前遇到了一个我想为iOS构build的医学图书馆的问题。 我可以用CMake来处理。

也许这个链接可以是一个起动器。

http://computer-vision-talks.com/2010/12/building-opencv-for-ios/

祝你好运!

在编译OpenCV库/ framework for iOS时将-DCMAKE_OSX_ARCHITECTURES="armv6;armv7;armv7s;i386"传递给cmake。