生成错误-文件中缺少必需的体系结构i386


105

生成我的iPhone应用程序时出现此错误:

ld:警告:在/Developer/Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS3.1.sdk/System/Library /Frameworks/UIKit.framework/UIKit中,文件中缺少必需的体系结构i386

我的应用程序中的所有框架都一样。这很奇怪,因为这没有更早发生。


在安装Snow Leopard和新的iPhone SDK(Xcode 3.2)之后,是否会发生这种情况?
2009年

8
我的答案解决了这个问题。请检查。
乔丹2010年

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

@aroth也正确,请检查此问题
ArkReversed 2013年

Answers:


131

当您将框架添加到项目中并且无意中将框架复制到项目目录中时,就会发生这种情况。

解决方法是检查项目目录(在磁盘上存储项目的位置)中是否存在任何iPhone SDK * .Framework文件,然后删除它们。

此后项目将建设良好。


4
另外,请在iOS设备(而不是模拟器)上进行测试。
猛禽

如果您有其他框架,那么修改项目文件似乎也删除了对该文件的引用,这很
可行

对我不起作用。我的项目目录中没有.framework文件。Fwiw,我先进行清理,然后进行构建,然后这个问题开始了。干净肯定有破损的东西。
Alyoshak '18年

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 projs时,Xcode似乎很容易与元数据失去联系。在这种情况下,其中一个安装了3.0和Leopard,另一个安装了3.1和Snow Leopard。FRAMEWORK_SEARCH_PATHS元数据在“构建设置”中显示为空白,而实际的project.pbxproj中包含内容。
2009年

1
同意的FRAMEWORK_SEARCH_PATHS在我的构建设置中也显示为空白。但是,按说明手动编辑project.pbxproj文件可解决此问题。
阿拉斯戴尔·艾伦

11
这对我没有用。但是,您将我带到正确的位置。我的.pbxproj没有FRAMEWORK_SEARCH_PATHS键,但是有一个名为LIBRARY_SEARCH_PATHS的键。
叛乱

我第二次@rebellion。也许较新的XCode版本更改了键名。
Moshe

谢谢,我的pbxproj文件中还有一个杂散的LIBRARY_SEARCH_PATHS键。该键在Xcode 3的项目设置中以粗体显示,但没有值。这使我相信有些不对劲。我确实曾经在Xcode 4 Preview 5中打开过该项目,此后发生了。
mvexel 2011年

43

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

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

这导致编译器找到不正确架构的框架。在目标的构建设置中的“框架搜索路径”键下删除任何值将解决此问题。


这就是我的问题。每当我添加一个新库时,它都会添加一堆搜索目录。即使我删除了引用,搜索目录条目也曾经在那里引起问题。
darshansonde,2012年

在我的情况下,“框架搜索路径”已经为空。我得到的确切错误是ld:为iOS Simulator构建,但是针对针对MacOSX文件'/usr/lib/libSystem.B.dylib'为架构i386 clang构建的dylib链接:错误:链接器命令失败,退出代码为1(使用-v查看调用) 我在Mavericks上使用SDK 7.0。
2013年

我遇到了同样的错误,我从“构建设置”下的框架搜索路径中删除了这些值,现在可以成功编译了。
尼拉夫

10

我只是想在XCode中提及这一点,如果您转到“编辑项目设置”并找到“搜索路径”,则存在“框架搜索路径”字段。更新此版本可以解决问题,而无需修改项目文件!

干杯!

杰西


我有一个同样的问题使我非常疯狂。看起来你们知道解决方案,但我找不到“ project.pbxproj”文件,也找不到“编辑项目设置”的位置。
saman01 2011年

2
在XCode 4.2.1中,我发现如下:在“项目浏览器”中单击项目名称。在出现的属性屏幕中,选择“构建设置”选项卡。搜索路径位于此屏幕中。删除它们对我有用。
dsteele 2012年

8

添加框架时,请检查是否没有将框架复制到项目中。如果复制它,它将找不到原始路径。解决此问题。从项目的frameworks文件夹中删除AVFoundation框架,然后再次添加它,但这一次,请确保未选中复制检查。

这为我解决了!


8

我以不同的方式修复它。我收到此错误的原因是我在项目中添加了security.framework两次。我无法在xcode中看到安全框架,因此我在finder中打开了项目并找到了该框架我删除并解决了问题。



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中打开project.pbxproj(Textmate对此很有用)。查找“ / *开始XCBuildConfiguration部分* /”,然后查找“ LIBRARY_SEARCH_PATHS”和“ FRAMEWORK_SEARCH_PATHS”。根据需要添加或修改路径,然后保存文件。

无论如何,屁股痛,我肯定要指出原因,因为我已经发生过几次了。项目构建良好,然后只是建立起来,并拒绝这样做,这似乎没有什么道理。


我将开始一个新项目。哎呀
·沙阿巴赞

您可以从目标的信息面板中修复“ Frameworks搜索路径”构建设置。
John Cromartie

我收到了错误,但没有上述框架问题。奇怪的是,在一台计算机上,该项目可以从SVN中检出并构建良好,而在另外两台计算机上,则突然在每次构建中均导致此错误。在尝试了各种其他解决方案之后,唯一(且相当简单)的解决方案是创建一个新的空白项目并将所有文件移入其中。
mmattke,2011年

这种方法对我有用。我有一个正在工作的项目集,一天突然停止为一种配置进行构建。没有理由。使用上面的textmate技术,并注意到该配置中缺少“ $(SDKROOT)/ Developer / Library / Frameworks”。不知道为什么,我无法使用Xcode看到它。
罗布

4

“编辑项目设置”并找到“搜索路径”。有一个用于“框架搜索路径”的字段。删除所有!!


4

这也发生在我身上。感谢一个伟大的合作伙伴,我们找到了答案。您的Xcode可能指向模拟器..将其更改为IOS设备。


1

从终端在框架上运行file命令:

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

您应该返回一条消息,告诉您UIKit二进制与哪些体系结构兼容。如果未列出“ i386”,则说明已设法删除了iKit版本的i386,这意味着您无法为模拟器构建。要解决此问题,必须重新安装SDK。

如果您遇到其他错误,希望它可以帮助您确定实际问题是什么。


重新安装SDK,我仍然得到相同的确切构建错误。
·沙阿巴赞

我有这个问题。已经检查了框架和库路径,它们很干净。命令文件/Developer/Platforms.../UIKit.framework/UIKit仅显示“ Mach-O动态链接的共享库臂”。是否真的需要安装整个SDK?还是可以复制完整版本的框架?
2011年

好好学习!就我而言,armv7和i386在那里,但没有armv6!

1

我只是想让您知道,就我而言,我遇到了同样的问题,我意识到我有一个名为Xcode3.1.3的较旧Xcode文件夹,我只是对其进行了重命名,因为它是一个较旧的版本,这对我来说很神奇。


1

在目标设置中检查您的图书馆搜索路径。有时候,高飞的库会在那里输入,这会给你类似的错误。

您可以删除此部分中的所有条目。


0

我刚刚经历了一些稍有不同的事情,因为我在自己的库(WM_GSRecognizerLib)上工作,但是错误是相同的。

发生了什么:由于进行了一些更新,以lib为目标的要包含的路径(.a)来自“ Debug-iphoneos”文件夹(生成该文件夹)。通用iOS设备的编译工作良好,但不适用于模拟器,抱怨缺少i386架构。

我针对此问题所做的工作还包括“ Debug-iphonesimulator”文件夹中的二进制文件。

它可以为该主题提供帮助,因为在这里进行了解释:设备需要arm64 / armv7 / armv7s的二进制文件,而模拟器确实需要i386。


0

我的解决方案是将模拟器目标调试设置为YES,仅查看git status即可查看仅作为.project添加为体系结构的新行。如果不设置,则该构建将在所有体系结构上运行,并显示一些缺少的体系结构,例如i386或其他。注意显然,主要问题是使用实现某种特定体系结构的框架。


-1

我在使用xcode版本4.0.2时也遇到了同样的错误,所以我选择了xcode项目文件,然后从他们选择的Target选项中看到了我项目的应用程序,因此我单击了它并转到了构建设置选项。

他们在搜索选项中输入了框架搜索路径,并删除了所有设置,然后单击“生成”按钮,对我来说效果很好,

感谢致敬

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.