找不到架构i386的符号

Doz*_*Doz 110 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_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**
Run Code Online (Sandbox Code Playgroud)

不确定这意味着什么.

小智 91

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

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

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

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

然后在页面顶部,它告诉您使用哪个框架,SystemConfiguration在本例中.所以将它添加到项目中,然后再次编译.

然后继续这样做,直到它工作......

编辑:我从未使用过模拟器,但这就是你在设备上所做的事情 - 我认为它是一样的......


Nir*_*gas 63

有时,目标中缺少源文件.

  1. 检查哪些符号缺失
  2. target-> build phases-> compile source
  3. 添加缺少的源文件(如果未列出)
  4. 命令+ b表示幸福

您可以选择似乎"缺失"的文件,并在右侧实用工具栏中检查为您正在构建的目标选择了他们的复选框.


epa*_*tel 49

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

https://allseeing-i.com/ASIHTTPRequest/Setup-instructions


Pru*_*vid 31

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

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

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

3)选择Link binary with library选项

4)添加你要获得的框架

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

6)再次构建它并且错误消失了.


jus*_*koh 16

考虑为此添加我的解决方案,花了几个小时后出现同样的错误:(

上面的人是正确的,你要检查的第一件事是你是否错过了添加任何框架,请参阅上面的Pruthvid提供的步骤.

事实证明,我的问题是在删除它之后缺少一个编译类,后来再次将其添加回来.

检查您的"编译源",如图所示报告的错误类.添加您创建的任何缺少的类.

  • 谢谢...这对我有用.我正在实现一个自定义类.复制了自定义类.h和.m进入项目.上面有#import,仍然出现错误.将自定义类'.m添加到"编译源"部分解决了它! (2认同)

Lit*_*T.V 16

问题是应用目标缺少添加字段的目标成员资格.因此,选择文件并将复选标记添加到目标成员资格框中

例如,如果在common.m中的方法定义中显示错误在此输入图像描述


Tib*_*abo 7

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

在我的项目中,列出了两个相同的框架,当我删除其中一个时,我遇到了这个错误,因为它也从"Link Binary With Libraries"列表中删除了它.我加回来了,问题就消失了(我仍然列出了两个框架)


Jam*_*s J 5

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

只是一个疯狂的猜测。


Jos*_*osh 5

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

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

原因(在我的情况下): 我的项目有多个目标,即使主要目标的构建设置>体系结构设置为包含armv7s体系结构,主要目标依赖于另一个目标(在Build Phases> Dependencies下列出),以及我没有想过为其他目标重置Build Settings> Architectures,我不得不改变它以包含armv7s.我想模拟器和设备运行在不同的架构上,这就是为什么模拟器没问题而设备没有.