Xcode 5.1 在 64 位模拟器上构建 opencv 失败

Posted

技术标签:

【中文标题】Xcode 5.1 在 64 位模拟器上构建 opencv 失败【英文标题】:Xcode 5.1 build opencv failed on 64 bit simulator 【发布时间】:2014-03-17 02:42:48 【问题描述】:

我将 Xcode 更新到 5.1,我的 ios 应用程序项目中出现了许多错误,它使用了 opencv 框架 2.4。 我的电脑是 macbook air 和 OSX 10.9.2。

当我编译我的项目时,它在我使用 Iphone Retina (3.5-Inch ,4-Inch) Simulator 时运行良好。但是当我使用 Iphone Retina(4 英寸 64 位)时,我在尝试构建和运行时收到以下消息:

ld: warning: ignoring file /Users/mike/Documents/opencv2.framework/opencv2, missing required architecture x86_64 in file /Users/mike/Documents/opencv2.framework/opencv2 (3 slices)
Undefined symbols for architecture x86_64:
  "CvKNearest::CvKNearest(CvMat const*, CvMat const*, CvMat const*, bool, int)", referenced from:
  -[HomeViewController ocrTicket:] in HomeViewController.o
  "CvKNearest::~CvKNearest()", referenced from:
  -[HomeViewController ocrTicket:] in HomeViewController.o
  "cv::_InputArray::_InputArray(cv::Mat const&)", referenced from:
  -[HomeViewController ocrTicket:] in HomeViewController.o
  PreProcessImage(cv::Mat*, cv::Mat*, int, int) in HomeViewController.o
  PreProcessImageNew(cv::Mat*, cv::Mat*, int, int) in HomeViewController.o
  -[HomeViewController FromMat:ObtainRect:] in HomeViewController.o
...
ld: symbol(s) not found for architecture x86_64

【问题讨论】:

【参考方案1】:

Xcode升级到5.1,苹果默认让所有app通过64位编译。通过这种方式可以关闭:选中了

目标 -> 构建设置 -> 架构。双击 架构

,选择其他,删除除

$(ARCH_STANDARD) (' - ')

,然后增加

armv7 和 armv7s' + '

(点)。再次编译clean

【讨论】:

我有一个新问题。现在我想将我的应用程序提交到 AppStore。但在验证过程中,它说“此捆绑包无效。包含 armv7s 架构的应用程序必须包含 armv7 架构”。应该怎么做? 你在架构中添加了armv7吗? @bca 你可以尝试找到“Build Active Architecture Only”并将Release设置为NO [***.com/questions/12487689/… 。是的,我添加了。仅构建活动架构设置为否,但没有帮助。我通过从我的 macbook 中删除 iPhone 5c 解决了这个问题。奇怪。 可能是因为你在用手机驾驶模拟器的时候,或者只编译当前版本的CPU架构。【参考方案2】:

简答:从构建设置中的架构列表中删除 arm64

长答案:从 Xcode 5.1 开始,默认情况下将 arm64 包含在标准构建架构列表中。如果您使用没有 64 位切片的预编译库(如 OpenCV),这将导致问题,因为链接器将无法找到有效代码。不必担心从架构列表中删除 arm64。只要它在 Valid Architectures 列表中,它仍然可以在 64 位平台上运行。

【讨论】:

感谢您回答我。你能教我如何“从我的构建设置中的架构列表中删除 arm64 吗?”你知道 Xcode 中的更改设置对于像我这样的普通人来说是危险的。 1) 寻找“架构” 2) 删除“arm64” 其实我应该改写一下。您想删除“标准架构”并在其位置添加“armv7”和“armv7s”(从 iPhone 3GS 开始的 32 位架构)。 谢谢。你的回答是正确的,但 MackC 给了我更多的细节。

以上是关于Xcode 5.1 在 64 位模拟器上构建 opencv 失败的主要内容,如果未能解决你的问题,请参考以下文章

Xcode:只会在 4 英寸 64 位设备上失败

苹果会拒绝使用 xcode 5.1 构建的应用程序吗

XCode 4.4 iOS 5.1 模拟器问题

xcode5:构建时出现 Apple LLVM 5.1 错误

Xcode 5.1.1 归档应用程序导致构建错误

在 xcode 4.5.1 上创建临时的、无线的、iOS 5.1 ipad 应用程序