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 失败的主要内容,如果未能解决你的问题,请参考以下文章