找不到架构i386的符号

时间:2011-01-29 22:56:29

标签: 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**

不确定这意味着什么。

18 个答案:

答案 0 :(得分:91)

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

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

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

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

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

然后继续这样做直到它起作用......

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

答案 1 :(得分:63)

有时目标中缺少源文件。

  1. 检查缺少哪些符号
  2. target->构建阶段 - >编译源
  3. 添加缺少的源文件(如果未列出)
  4. 命令+ b for bliss
  5. 您可以选择似乎“缺失”的文件,并在右侧实用工具栏中检查是否为您正在构建的目标选中了他们的复选框。

答案 2 :(得分:49)

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

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

答案 3 :(得分:31)

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

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

2)选择第四个标签构建阶段

3)选择Link binary with library option

4)添加你要获得的框架

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

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

答案 4 :(得分:16)

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

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

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

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

答案 5 :(得分:16)

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

例如,如果common.m enter image description here

中的方法定义中显示错误

答案 6 :(得分:7)

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

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

答案 7 :(得分:5)

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

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

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

答案 8 :(得分:4)

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

只是猜测。

答案 9 :(得分:3)

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

答案 10 :(得分:3)

就我而言,所发布的解决方案都没有奏效。 我不得不删除项目并从SVN服务器进行新的结帐。幸运的是,该项目是在版本控制系统中托管的。不知道我会做什么。

答案 11 :(得分:1)

在使用已定义的模板化类的C ++项目中,在收到相同错误的同时,我在Project Navigator中选择了带有已定义的 templatized 类的.cpp文件,然后删除>删除参考。关联的.h文件虽然仍然在项目中引用,但需要对.cpp有一个#include语句,如下所示:

#ifndef __CircularBuffer__CircularBufferT__
#define __CircularBuffer__CircularBufferT__

... snip ...

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

如果您想查看,一个简单的项目示例是on github

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

答案 12 :(得分:1)

如果突然出现此错误,则表示项目缺少某些框架。库和依赖项目可能需要框架,因此如果您最近添加了一个框架,那么可能会导致此错误。

要添加框架,请在项目视图中右键单击项目名称,选择“添加”,然后从列表中选择“现有框架”。然后找到包含您缺少的符号的框架。

另一件事是,如果您在已编译的资源中添加了任何类并从项目中删除了这些类,则会出现错误。最好的办法是从已从项目中删除的编译资源(Build settings - > compile sources)中删除类。

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

答案 13 :(得分: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

然后我去了所述库的作者提供的示例项目..并注意到以前的标志在我的构建设置中逐字复制到其他链接器标志..但是在我的项目中......它们不是! ..所以我只是复制并粘贴到我的项目的构建设置其他链接器标志,一切正常!

带走一点:如果您在设置中依赖某个.xcconfig文件,请使用示例代码源或其他内容仔细检查并确保它已实际应用..它在我的情况下未正确应用< / p>

答案 14 :(得分:0)

在Xcode 11中解决此问题,修复是将最低部署目标从10.0更改为11.0,希望这对某人有帮助:)

答案 15 :(得分:0)

我之前只是意识到我添加了一个仅限数据的@interface而忘记添加空的@implementation块。

答案 16 :(得分:0)

我在没有添加Core.Location框架的情况下使用了CLGeocoder。基本上这个错误可能意味着多种事情。我希望这有助于其他人。

答案 17 :(得分:0)

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

如果您只是删除该组,然后将新文件夹拖放到项目中,那么&#34;图书馆搜索路径&#34;会有两个SDK。要解决此问题,只需删除旧的SDK路径。