Objective c 未找到架构i386的符号

Objective c 未找到架构i386的符号,objective-c,ios,xcode4,Objective C,Ios,Xcode4,尝试使用Xcode编译时,我遇到以下错误: **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_

尝试使用Xcode编译时,我遇到以下错误:

  **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**

不确定这意味着什么。

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

要添加框架,请在项目视图中右键单击项目名称,选择
add
,然后从列表中选择
existingframeworks…
。然后找到框架中缺少的符号

至于如何找到所需的框架,我发现使用google是最简单的,不过您也可以使用Xcode帮助搜索。搜索其中一个符号,尽最大努力找出未混合的名称(例如,
SCNetworkReachabilityGetFlags
),然后在developer.apple.com上找到的第一个文档链接通常就是正确的。你通常不需要去很远的地方打猎。在本例中,这是本页:

然后在页面顶部,它会告诉您要使用哪个框架,在本例中,
SystemConfiguration
。因此,将其添加到项目中,然后再次编译

然后继续这样做直到成功


编辑:我从未使用过模拟器,但这是您在设备上执行的操作-我假设它是相同的…

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


这只是一个猜测。

您正在使用AsitpRequest,因此需要设置项目。在这里阅读第二部分


我使用以下方法解决了它(对于XCode 4):

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

2) 选择第四个选项卡构建阶段

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

4) 添加您正在获取的框架

5) 将框架从主文件夹移动到框架文件夹


6)再次建立错误,错误。

< P>另一种可能导致这个问题的情况是,如果您的代码调用C++,或者是用C++代码调用。当从Obj-c调用时,我自己的.c文件的实用程序函数显示为“symbol not found”时出现问题。解决方法是更改文件类型:在Xcode 4中,使用扩展信息窗格将文件类型设置为“Objective-c++Source”;在Xcode 3中,使用“Get Info”将文件类型更改为“source.cpp.objcpp”。

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

在我的项目中,列出了两个相同的框架,当我删除其中一个框架时,我出现了这个错误,因为它也将其从“链接二进制与库”列表中删除。
我添加了回去,问题就消失了(我仍然列出了两个框架)

有时目标中缺少源文件

  • 检查缺少哪些符号
  • 目标->构建阶段->编译源代码
  • 如果未列出缺少的源文件,请添加它们
  • 命令+b表示幸福

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

    在花了几个小时处理同一错误后,考虑添加我的解决方案:(

    上面的人是正确的,您应该检查的第一件事是您是否遗漏了添加任何框架,请参阅上面Pruthvid提供的步骤

    我的问题是,我删除了一个compile类,然后又重新添加了它


    检查“编译源代码”如报告的错误类所示。添加您创建的任何缺少的类。

    在我的情况下,所有发布的解决方案都不起作用。我必须删除该项目并从SVN服务器重新签出。。幸运的是,该项目托管在版本控制系统中。不知道如果不这样做,我会怎么做。

    另一个原因这可能发生在升级SDK时


    如果只需删除组,然后将新文件夹拖放到project,则“库搜索路径”要解决这两个问题,在C++项目中,使用定义的<强>模板> <强>类简单地删除旧SDK路径。

    < P>,在接收到相同的错误时,在项目导航器中选择具有“强”>模板> < /强>类的CPP文件,然后删除>删除引用。在项目中,需要向.cpp提交一份#include声明,如下所示:

    #ifndef __CircularBuffer__CircularBufferT__
    #define __CircularBuffer__CircularBufferT__
    
    ... snip ...
    
    #include "CircularBufferT.cpp"
    #endif /* defined(__CircularBuffer__CircularBufferT__) */
    
    如果您想查看,一个简单的项目示例是:


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

    我通过更改我的目标的所有构建设置>架构,修复了我的项目上的类似错误

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

    原因(就我而言): 我的项目有多个目标,即使主目标的Build Settings>Architectures设置为包含armv7s架构,但主目标依赖于另一个目标(在Build Phases>Dependencies下列出),我也没有想到为另一个目标重置Build Settings>Architectures,因此我
    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