Iphone OpenCV.Framework不针对armv7s体系结构进行编译
我正在使用openCV框架开发一个iphone应用程序。 一切正常。然而,最近随着iOS 6和XCode 4.5的发布,我正在将我的项目迁移到XCode 4.5 在构建时,我遇到了以下错误: ld:文件是通用的(2个片),但不包含(n)个armv7s 切片: /用户/jobs/iPhone_客户端/workspace/MyProject/third-party/OpenCV.framework/OpenCV 对于体系结构armv7s clang:错误:链接器命令失败,退出 代码1(使用-v查看调用) **构建失败** 以下生成命令失败: Ld build/MyProject.build/Debug-iphoneos/MyProject.build/Objects-normal/armv7s/MyProject 正常armv7s(1个故障) 据我所知,这是由于新的armv7s体系结构。 OpenCV显然不是用armv7s编译的 如何解决此问题 在哪里可以找到与armv7s体系结构兼容的新版本的框架 如果没有兼容的框架可用,有没有办法获取源代码并创建我自己的库来编译新的体系结构?也许是一些快速的步骤如何做到这一点 注意:只是要注意,我需要的是armv7s的构建,而不是armv7。Iphone OpenCV.Framework不针对armv7s体系结构进行编译,iphone,ios,opencv,xcode4.5,Iphone,Ios,Opencv,Xcode4.5,我正在使用openCV框架开发一个iphone应用程序。 一切正常。然而,最近随着iOS 6和XCode 4.5的发布,我正在将我的项目迁移到XCode 4.5 在构建时,我遇到了以下错误: ld:文件是通用的(2个片),但不包含(n)个armv7s 切片: /用户/jobs/iPhone_客户端/workspace/MyProject/third-party/OpenCV.framework/OpenCV 对于体系结构armv7s clang:错误:链接器命令失败,退出 代码1(使用-v查看调
谢谢您可以始终不瞄准armv7,而只瞄准armv7。您的应用程序在iPhone5上仍然可以正常运行,只是无法针对新的指令集进行充分优化 显而易见,您需要重新编译和重建openCV.framework库,并将其用于armv7s
在重建之前调整库“项目设置”和“目标设置”。祝你好运 也许可以用CMake来构建它。一年前,我想为iOS构建一个医学图书馆,但遇到了一个问题。我可以用CMake来处理 也许这个链接可以作为一个开端
祝你好运 克隆opencv的Xcode项目,并根据自述文件更新opencv git子模块: 检查生成设置,确保iOS6和ARMV7存在。单击build。您现在应该拥有与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
根据我目前的研究,最后一个条目是针对ARMV7的
编辑:最后一个条目确实是armv7s。我运行了Xcode自己的lipo info命令:
$ xcrun -sdk iphoneos lipo -info libopencv_core.a
Architectures in the fat file: libopencv_core.a are: armv7 armv7s
编译用于iOS的OpenCV库/框架时,将
-DCMAKE_OSX_ARCHITECTURES=“armv6;armv7;armv7s;i386”
传递给cmake。此答案基于n9986给出的答案。正如他所建议的,我克隆了在
当我下载它时,项目中对不同库的几个引用被破坏了,这很奇怪,但它们很容易修复。修复后,它的行为与n9986描述的完全相同,输出为armv7和armv7编译的库。然而,出于我的目的,我要求将它们捆绑到.framework中,以便它们可以作为我一直使用的旧.framework的替代品
之前,我下载了最新版本的Opencv for ios,并花了相当多的时间试图修改他们的cmake文件,以便在支持ARMV7的情况下编译。jonmarimba已经重新构造了xcode项目文件,去掉了它的cmake依赖项,这使得更改目标体系结构更加直观。不幸的是,他没有像标准openCV构建一样构建那么多的库。我在jonmarimba的opencv_world项目中添加了一个新的目标,这是标准opencv版本中用于转换为框架的目标。一旦构建完成,我就使用它作为标准openCV版本生成的框架文件结构中静态库的替代品
我创建的框架可以下载。作为我以前的opencv2.framework的替代品,它非常适合我。但是我注意到jonmarimba没有转换opencv\u videostab、opencv\u stitching或opencv\u nonfree的目标。如果您使用其中一个库,我的框架可能无法为您工作。如果是这样,请让我知道,我可以尝试在xcode项目中为您设置这些目标
更新
要为其他体系结构进行编译,请将包含的xcode项目中的目标体系结构更改为opencv_世界库中您喜欢的任何内容。在你建立它之后,去找你刚刚建立的库。将opencv_world库重命名为opencv2,并将.framework中的库文件替换为opencv_world
更新2
现在,默认情况下使用armv7s支持编译,因此这些解决方案已经过时。简单地说,我从中克隆了源代码并使用它构建
然后我得到了与armv7、armv7s和模拟器一起工作的opencv2.framewok。我对旧版本的RestKit框架也有同样的问题。RestKit提供了一个新版本,只是需要对使用该框架的代码进行大量更改。当我发现一些东西时,我会让你知道。@Ken是的,在新架构问世之前,我一直在使用这个。我需要它为armv7s提供的链接是为armv7(没有s)提供的,我无法控制构建。它是一个在服务器上运行的自动构建脚本。我只能发送我的代码,然后它就会生成。脚本使用的是armv7s框架,最近有人修改了服务器的配置,并破坏了它。这是他们的责任来解决这个问题。我试图这么做,但是我在哪里可以找到openCV的XCode项目呢?它声明了这一点,但是它不适用于armv7s架构。与上述错误相同。您也可以在库中尝试此操作:查看此操作是否有效。这是一种成功构建的方法,但每个人都在报告这种方法的成功。@n9986很好的建议,我也发现了,但我还没能做到