2011-01-29 121 views
104

当试图在Xcode,我收到以下错误编译:符号(S)没有找到i386硬件架构

**Ld /Users/doronkatz/Library/Developer/Xcode/DerivedData/iKosher-bphnihrngmqtkqfgievrrumzmyce/Build/Products/Debug-iphonesimulator/iKosher.app/iKosher normal i386 
    cd /Users/doronkatz/Sites/xCode/iKosher 
    setenv MACOSX_DEPLOYMENT_TARGET 10.6 
    setenv PATH "/Xcode4/Platforms/iPhoneSimulator.platform/Developer/usr/bin:/Xcode4/usr/bin:/usr/bin:/bin:/usr/sbin:/sbin" 
    /Xcode4/Platforms/iPhoneSimulator.platform/Developer/usr/bin/gcc-4.2 -arch i386 -isysroot /Xcode4/Platforms/iPhoneSimulator.platform/Developer/SDKs/iPhoneSimulator4.2.sdk -L/Users/doronkatz/Library/Developer/Xcode/DerivedData/iKosher-bphnihrngmqtkqfgievrrumzmyce/Build/Products/Debug-iphonesimulator -L/Users/doronkatz/Sites/xCode/iKosher -F/Users/doronkatz/Library/Developer/Xcode/DerivedData/iKosher-bphnihrngmqtkqfgievrrumzmyce/Build/Products/Debug-iphonesimulator -filelist /Users/doronkatz/Library/Developer/Xcode/DerivedData/iKosher-bphnihrngmqtkqfgievrrumzmyce/Build/Intermediates/iKosher.build/Debug-iphonesimulator/iKosher.build/Objects-normal/i386/iKosher.LinkFileList -mmacosx-version-min=10.6 -all_load -ObjC -Xlinker -objc_abi_version -Xlinker 2 -lz -framework Security -framework CFNetwork -framework CoreData -framework Foundation -framework UIKit -framework CoreGraphics -framework QuartzCore -o /Users/doronkatz/Library/Developer/Xcode/DerivedData/iKosher-bphnihrngmqtkqfgievrrumzmyce/Build/Products/Debug-iphonesimulator/iKosher.app/iKosher 

Undefined symbols for architecture i386: 
    "_UTTypeCreatePreferredIdentifierForTag", referenced from: 
     +[ASIHTTPRequest mimeTypeForFileAtPath:] in ASIHTTPRequest.o 
    "_UTTypeCopyPreferredTagWithClass", referenced from: 
     +[ASIHTTPRequest mimeTypeForFileAtPath:] in ASIHTTPRequest.o 
    "_kUTTagClassMIMEType", referenced from: 
     +[ASIHTTPRequest mimeTypeForFileAtPath:] in ASIHTTPRequest.o 
    "_kUTTagClassFilenameExtension", referenced from: 
     +[ASIHTTPRequest mimeTypeForFileAtPath:] in ASIHTTPRequest.o 
    "_SCNetworkReachabilitySetCallback", referenced from: 
     -[Reachability startNotifier] in Reachability.o 
    "_SCNetworkReachabilityScheduleWithRunLoop", referenced from: 
     -[Reachability startNotifier] in Reachability.o 
    "_SCNetworkReachabilityUnscheduleFromRunLoop", referenced from: 
     -[Reachability stopNotifier] in Reachability.o 
    "_SCNetworkReachabilityCreateWithName", referenced from: 
     +[Reachability reachabilityWithHostName:] in Reachability.o 
    "_SCNetworkReachabilityCreateWithAddress", referenced from: 
     +[Reachability reachabilityWithAddress:] in Reachability.o 
    "_SCNetworkReachabilityGetFlags", referenced from: 
     -[Reachability currentReachabilityStatus] in Reachability.o 
     -[Reachability isReachable] in Reachability.o 
     -[Reachability isConnectionRequired] in Reachability.o 
     -[Reachability isConnectionOnDemand] in Reachability.o 
     -[Reachability isInterventionRequired] in Reachability.o 
     -[Reachability isReachableViaWWAN] in Reachability.o 
     -[Reachability isReachableViaWiFi] in Reachability.o 
     ... 
ld: symbol(s) not found for architecture i386 
collect2: ld returned 1 exit status** 

不知道这意味着什么。

回答

91

如果你突然出现这种情况,通常意味着项目缺少一些它需要的框架。库和从属项目可能需要框架,所以如果您最近添加了一个,那么可能会导致此错误。

要添加框架,请右键单击项目视图中的项目名称,选择Add,然后从列表中选择Existing frameworks...。然后找到你丢失的符号的框架。

至于你如何找到你需要的框架,我发现使用谷歌最简单,尽管你也可以使用Xcode帮助搜索。搜索其中一个符号,尽力找出未加密的名称(例如SCNetworkReachabilityGetFlags),然后在developer.apple.com上找到的第一个文档链接通常是正确的。你通常不必非常远。在这种情况下,这是此页:

https://developer.apple.com/documentation/systemconfiguration/scnetworkreachability-g7d

然后在页面的顶部,它会告诉你在这种情况下使用,SystemConfiguration其框架。所以将其添加到项目中,然后重新编译。

然后就继续做,直到它的工作原理...

编辑:我从来没有使用模拟器,但是这是你的设备上做什么 - 我认为这是相同的......

4

您的项目是否依赖于另一个项目,并且该项目中的目标是否被设置为您的主要目标的直接依赖项?如果是这种情况并且没有设置依赖关系,则可能不会为所有配置(即模拟器)构建相关目标。

只是疯狂的猜测。

30

我解决它使用下面的方法(的XCode 4):

1)选择在项目导航窗口中的项目,该项目将显示在右侧

项目总结

2)选择第4个选项卡建设阶段

3)选择链接二进制与库选项

4)添加框架,你越来越

5)移动从主文件夹中的框架,框架文件夹

6)重新生成它和错误都没有了。

+0

谢谢。我在搜索MFMailCompose时找到了这个答案,并通过添加MessageUI.framework来解决。 – 2012-12-15 13:42:39

3

可能导致此问题的另一种情况是,如果您的代码调用C++或被C++代码调用。从Obj-C调用时,我遇到了自己的.c文件的实用程序功能,该功能显示为“找不到符号”。解决方法是更改​​文件类型:在Xcode 4中,使用扩展信息窗格将文件类型设置为“Objective-C++ Source”;在Xcode 3中,使用“Get Info”将文件类型更改为“source.cpp.objcpp”。

7

确保缺少的框架实际上列在“目标/构建阶段/链接二进制库”如果不是只是添加它。如前所述,它通常表示缺少框架。

在我的项目中列出了两个相同的框架,当我删除其中的一个时,出现此错误,因为它也从“Link Binary With Libraries”列表中删除它。 我加回来,问题消失(我仍然有两个框架列出)

63

有时候有源文件从目标中丢失。

  1. 检查哪些符号丢失
  2. 靶>建立phases->编译源
  3. 添加缺少的源文件,如果它们未列出
  4. 命令+ B为幸福

您可以选择似乎“缺失”的文件,并在右侧的实用工具栏中选中为您正在构建的目标选中其复选框。

+1

这经常会在合并两个项目文件时不当并且目标成员资格丢失时发生。 – 2012-06-05 00:44:16

+1

非常感谢你,不知何故xcode没有将所需的.m文件添加到构建阶段阶段! – dreampowder 2012-10-15 20:33:29

+1

谢谢:) 添加2个文件到项目中,只有在完成这些步骤之后,所有内容都是O.K – user1105951 2013-06-23 10:39:06

16

思来加我为这个解决方案,在同样的错误:(

家伙以上是正确的,你应该检查的第一件事情是你是否已经错过了加入任何框架花了几个小时后,看到通过Pruthvid上面提供的步骤。

我的问题,它横空出世,是一个编译类失踪后,我删除了它,后来又增加了重新插上。

检查“编译源”如图所示为报道错误类别添加您创建的任何缺失类别

3

在我的情况下,没有发布的解决方案工作。 我不得不删除该项目,并从SVN服务器重新签出。幸运的是,这个项目被托管在版本控制系统中。不知道我会做什么,否则。

0

这可能发生的另一个原因是您升级SDK时。

如果您只需删除该组,然后将新文件夹拖放到项目中,则“库搜索路径”将包含这两个SDK。要解决,只需删除旧的SDK路径。

1

在使用定义的模板化,同时接收相同的错误一个C++项目,我选择cpp文件与项目导航定义的模板化类,则删除>删除参考。另外,相关的.h文件中,而该项目仍然被引用,需要有一个#include语句到的.cpp如下:

#ifndef __CircularBuffer__CircularBufferT__ 
#define __CircularBuffer__CircularBufferT__ 

... snip ... 

#include "CircularBufferT.cpp" 
#endif /* defined(__CircularBuffer__CircularBufferT__) */ 

如果你想看到的,一个简单的项目的例子是on github

这是一个间接的诡计,我不记得这个解决方法的原始来源。

5

我通过改变生成设置>架构ALL我的目标固定在我的项目类似的错误。

问题: 当我从Xcode 4.4升级到Xcode 4.5时,我的项目仍然在模拟器上编译好,但没有在设备上编译。在设备上,它抛出错误“架构armv7找不到符号”,以及误导性的“Apple Mach-O链接器错误”和“clang:error:linker命令失败,退出代码1(使用-v to请参阅调用)“。

原因(对我来说): 我的项目有多个目标,即使生成设置>为主要目标架构设定包括armv7s架构,主要目标依赖于其它目标(在Build Phases> Dependencies下面列出),并且我没有想过为该另一个目标重置构建设置>体系结构,我不得不改变它以包含armv7s。 我想模拟器和设备运行在不同的架构上,这就是为什么模拟器没有问题的原因。

1

如果这个错误突然出现,这意味着该项目缺少一些框架。库和从属项目可能需要框架,所以如果您最近添加了一个,那么可能会导致此错误。

要添加框架,请右键单击项目视图中的项目名称,选择添加,然后从列表中选择现有框架。然后找到你丢失的符号的框架。

另一件事是,如果您在编译的资源中添加了任何类并从项目中删除了这些类,则会显示错误。最好的办法是从编译资源(构建设置 - >编译源代码)中删除已从项目中删除的类。

在我的情况下,我已经在项目中添加了admob类并编译了项目。在后面的情况下,我不想在我的项目中包含admobs,所以我从我的项目中删除了admob类的引用。当发生这个错误时,我从编译资源中删除了admob的.m类,解决了这个问题。

1

在我尝试将PSPDFKIT演示库复制到我的项目中时,发生了这种情况。我遵循网站上的所有说明+本页面上的所有建议..出于某种原因,它一直在给出上述错误,问题是,如果我在错误方法中grepped消息..它只出现在二进制文件显然我无法访问源代码b/c我必须付钱)。

我在指令页注意到了这一点,虽然:

enter image description here

所以我去的那配置文件的胆量,发现这个:

OTHER_LDFLAGS=$(inherited) -ObjC -fobjc-arc -lz -framework CoreText -framework CoreMedia -framework MediaPlayer -framework AVFoundation -framework ImageIO -framework MediaPlayer -framework MessageUI -framework CoreGraphics -framework Foundation -framework QuartzCore -framework AVFoundation -framework CFNetwork -framework MobileCoreServices -framework SystemConfiguration -weak_framework UIKit 

然后我去了示例项目并且注意到之前的标志在我的构建设置中逐字复制到了其他链接器标志中..但是在我的项目中它们不是!因此我只是将它们复制并粘贴到我的项目的建设d设置其他链接器标志和一切工作!

拿走点:如果你依赖于你的设置上的一些.xcconfig文件,请仔细检查一下示例代码源或者其他东西,并确保它已经被实际应用..在我的情况下它没有正确应用

15

的问题是对于添加的日提交的丢失到应用目标。所以选择该文件和该复选标记添加到

例如,如果在一个方法定义示于错误的目标成员框目标成员common.m enter image description here

0

我曾经使用CLGeocoder而不添加Core.Location框架。基本上这个错误可能意味着多种事情。我希望这可以帮助别人。

0

我已经被这个难住了,只是为了实现我添加了纯数据@interface,并忘记添加空的@implementation块。

相关问题