2009-09-21 105 views
102

缺少必需i386硬件架构建设我的iPhone应用程序时,我得到这个错误:生成错误 - 在文件

ld: warning: in /Developer/Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS3.1.sdk/System/Library /Frameworks/UIKit.framework/UIKit, missing required architecture i386 in file

它去为我的应用框架相同。这很奇怪,因为这并没有发生。

+0

安装Snow Leopard和新的iPhone SDK(Xcode 3.2)后会发生这种情况吗? – avocade 2009-09-28 13:45:42

+8

我的答案解决了这个问题。请检查。 – Jordan 2010-10-16 14:44:47

+9

答案中未讨论的另一种可能性是,如果添加了对非通用框架的引用(即,您添加了armv6/armv7框架,然后尝试执行模拟器构建),则会出现此错误。如果您一直在构建自己的定制框架,这主要是一个问题。 – aroth 2011-05-26 23:11:44

回答

1

从终端上运行的框架文件命令:

file /Developer/Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS3.1.sdk/System/Library /Frameworks/UIKit.framework/UIKit 

应该会得到一个消息,告诉您该架构上的UIKit二进制文件兼容。如果你没有看到“i386”列表,那么你已经设法删除了i386版本的UIKit,这意味着你不能为模拟器构建。要解决这个问题,你必须重新安装SDK。

如果您遇到其他错误,希望它能帮助您找出实际问题所在。

+0

重新安装sdk和我仍然会得到相同的确切构建错误。 – 2009-09-22 02:47:46

+1

无需重新安装sdk花花公子 – Radix 2011-05-20 12:18:39

+0

我有这个问题。已经检查过框架和库路径,它们很干净。命令文件/Developer/Platforms.../UIKit.framework/UIKit只是说“Mach-O动态链接的共享库臂”。是否真的有必要安装整个SDK?或者我可以复制完整版本的框架? – 2011-11-03 22:44:14

5

虽然有可能删除了某些东西,但我的经验是,项目文件中有些东西被搞砸了。我还没有确定这个“东西”是什么。当SDK安装很好时,我遇到了类似的问题。有几个选项。

首先,将所有文件添加到新项目中。这似乎通常工作。虽然有点痛。

其次,您可以右键单击XCode/Get Info/Build/Library Search Paths中的项目。添加类似于/Developer/Platforms/iPhoneSimulator.platform/Developer/SDKs/iPhoneSimulator3.1.sdk/usr/lib的新路径。为每个版本(2.2.1等)和平台(模拟器或iPhoneOS)添加适当版本的字符串。如果框架是您的问题,请为框架搜索路径执行类似的操作。第三,这是更多的工作,但更可靠,是从MyProject.xcodeproj(Textmate是很好的)打开project.pbxproj。查找“/ *开始XCBuildConfiguration部分* /”,然后查找“LIBRARY_SEARCH_PATHS”和“FRAMEWORK_SEARCH_PATHS”。根据需要添加或修改路径,然后保存该文件。

在任何情况下,屁股疼痛,我想确定原因,因为我已经发生过几次。项目建立良好,然后立即起来,并拒绝这样做,似乎没有什么理由。

+0

我刚刚开始一个新项目。哦,井。 – 2009-09-23 00:59:35

+0

您可以从目标的信息面板修复“框架搜索路径”构建设置。 – 2009-09-23 16:48:00

+0

我得到了错误,但没有上述的框架问题。奇怪的是,在一台计算机上,该项目可能会检查出SVN并构建正常,而在另外两台计算机上,它突然导致每个构建都出现此错误。唯一的(也是相当简单的)修复 - 在尝试了各种其他解决方案之后 - 创建一个新的空白项目并将所有文件移入其中。 – mmattke 2011-09-08 18:18:17

43

这里发生的事情是,Xcode神秘地添加了一个指向特定iPhone设备SDK的“框架搜索路径”条目。例如,我最近设置为:

$(DEVELOPER_DIR)/Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS2.2.1.sdk/System/Library/Frameworks 

这会使编译器找到不正确体系结构的框架。在目标的构建设置中删除“框架搜索路径”键下的任何值都可以解决问题。

+0

这是我的情况。它每次添加一个新库时都添加了一堆搜索目录。即使我删除引用搜索目录条目曾经在那里导致问题。 – darshansonde 2012-01-18 13:43:02

+0

“框架搜索路径”在我的情况下已经是空的。我得到的确切错误是** ld:针对iOS模拟器的构建,但针对为MacOSX文件构建的dylib链接针对体系结构i386 “/usr/lib/libSystem.B.dylib”clang:error:链接器命令失败,退出代码1(使用-v来查看调用)** 我在小牛队上使用SDK 7.0。 – Ans 2013-10-30 05:02:36

+0

我有同样的错误,我删除了构建设置下框架搜索路径的值,现在它成功编译。 – Nirav 2015-09-12 14:33:13

85

我有这个相同的问题,并且解决方案证明是一个简单的修复。备份然后在TextMate或TextEdit中打开project.pbxproj(位于项目文件包内)并搜索标题为“/ * Begin XCBuildConfiguration section * /”的部分。找一个名为FRAMEWORK_SEARCH_PATHS的键并删除它,它的内容(每个构建配置一次,所以我在两处删除它)。这里是我删除的一个例子:

FRAMEWORK_SEARCH_PATHS = (
"$(inherited)", 
"\"$(DEVELOPER_DIR)/Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS3.1.sdk/System/Library/Frameworks\"",); 

我的项目现在为iPhone设备和iPhoneSimulator构建。

+2

我可以验证这是如所描述的那样工作。 似乎Xcode在不同计算机之间移动Xcode projs时可能很容易与元数据脱节;在这种情况下,一个有3.0和豹,另一个3.1和雪豹安装。 FRAMEWORK_SEARCH_PATHS元数据在Build Settings中显示为空白,而实际的project.pbxproj包含内容。 – avocade 2009-09-28 13:44:12

+1

同意FRAMEWORK_SEARCH_PATHS在我的构建设置中也显示为空白。但是,按照说明手动编辑project.pbxproj文件可以解决问题。 – 2009-10-05 13:59:06

+11

这不适合我。但是,你把我带到了正确的地方去寻找。我的.pbxproj没有FRAMEWORK_SEARCH_PATHS键,而是一个名为LIBRARY_SEARCH_PATHS的键。 – 2010-03-02 12:52:49

10

我只想在XCode中提到如果你去“编辑项目设置” 并找到“搜索路径”有一个“框架搜索路径”字段。更新此应该可以解决问题,而不必破解项目文件!

干杯!

杰西

+0

我有同样的问题,让我绝对疯狂。它看起来像你们知道解决方案,但我找不到“project.pbxproj”文件,并找不到“编辑项目设置”所在的位置。 – saman01 2011-09-07 02:56:11

+2

在XCode 4.2.1中,我发现如下:在项目导航器中点击项目名称。在出现的属性屏幕中,选择“构建设置”选项卡。搜索路径位于此屏幕中。删除它们为我工作。这些字段已经是空的 – dsteele 2012-02-12 23:16:04

1

我只想让你知道,在我的情况,我有同样的问题,我意识到,我有叫Xcode3.1.3旧的Xcode的文件夹,我只是将其重命名因为它是一个较旧的版本,并为我做了魔术。

8

检查您是否在添加框架时将框架复制到项目中。如果您复制它,它无法找到原始路径。解决这个问题。从您的项目的框架文件夹中删除AVFoundation框架,然后再次添加它,但是这次请确保您没有标记复制检查。

这为我修好了!

4

“编辑项目设置”,找到“搜索路径”有一个领域“框架搜索路径”。删除所有!!

+1

。我仍然得到这样的错误。 – 2016-09-17 22:53:45

1

在您的目标设置中检查您的图书馆搜索路径。有时候愚蠢的图书馆会进入这里,这会给你一个类似的错误。

您可以删除本节中的所有条目。

128

出现这种情况,当你添加了一个框架,你的项目和框架无意复制到你的项目目录。

修复的方法是检查你的项目目录(您存储磁盘上的项目)的任何iPhone SDK * .Framework文件并将其删除。

项目将建立罚款后。

+4

另外,在iOS设备上而不是模拟器上进行测试。 – Raptor 2011-11-01 09:51:44

+0

如果您有其他框架,然后修改项目文件似乎删除该引用过,这个工作寿,并且是容易,因为乔丹 – texian 2013-02-12 03:25:45

-1

我也得到了同样的错误我使用的Xcode 4.0.2版本,所以我所做的就是选择的Xcode项目文件,并从他们我选择的目标选择自己我可以看到我的项目的应用程序,所以我点击它,去了构建设置选项。

他们在搜索选项我输入框架搜索路径,并删除所有的设置,然后点击构建按钮,并为我工作就好了,

感谢和问候

4

它也发生在我身上。感谢伟大的合作伙伴,我们找到了答案。您的Xcode可能指向模拟器..change它的IOS设备如果你的程序是为了在设备上运行,而不是..built平滑后....

5

,确保你是不是要在运行它在模拟器上。听起来很明显,但无论如何检查。

8

I fixed it in a different way.The reason why i was getting this error was that i added security.framework twice in my project.I was not able to see security framework in xcode ,i opened the project in finder and found this framework which i deleted and problem solved.

0

我刚刚经历的东西稍有不同,因为我对我自己的库(WM_GSRecognizerLib)工作,但错误是一样的。

发生什么了:由于一些更新,瞄准的lib的路径,包括:(。a)来自“Debug-iphoneos”文件夹(它生成的位置)。为通用iOS设备编译工作正常,但不适用于模拟器,抱怨缺少i386体系结构。

我对这个问题做了什么,还包括来自“Debug-iphonesimulator”文件夹的二进制文件。

它可以帮助解决这个问题,因为解释在这里:设备需要arm64/armv7/armv7s的二进制文件,而模拟器需要i386。