116

尝试使用 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**

不知道这意味着什么。

4

18 回答 18

93

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

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

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

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

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

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

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

于 2011-01-29T23:47:46.390 回答
64

有时目标中缺少源文件。

  1. 检查缺少哪些符号
  2. 目标->构建阶段->编译源
  3. 如果未列出缺少的源文件,请添加它们
  4. command+b 幸福

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

于 2011-10-31T15:34:59.947 回答
50

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

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

于 2011-01-30T00:01:07.160 回答
33

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

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

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

3) 选择 Link binary with library 选项

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

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

6)再次构建它,错误就消失了。

于 2011-03-28T19:06:03.123 回答
17

在同一错误上花费了几个小时后,我想为此添加我的解决方案:(

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

事实证明,我的问题是删除后缺少一个编译类,后来又重新添加了它。

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

于 2012-03-20T02:39:59.513 回答
17

问题是应用程序目标缺少添加文件的目标成员资格。因此选择文件并将复选标记添加到目标成员资格框

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

于 2013-05-08T09:04:55.397 回答
8

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

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

于 2011-08-16T07:16:49.967 回答
6

我通过更改所有目标的Build Settings > Architectures修复了我的项目中的类似错误。

问题: 当我从 Xcode 4.4 升级到 Xcode 4.5 时,我的项目在模拟器上仍然编译得很好,但在设备上却没有编译。在设备上,它抛出错误“symbol(s) not found for architecture armv7s”以及误导性的“Apple Mach-O Linker Error”和“clang: error: linker command failed with exit code 1 (use -v to see invocation) )。”

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

于 2012-10-31T18:48:17.950 回答
5

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

只是一个疯狂的猜测。

于 2011-01-29T23:57:14.373 回答
4

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

于 2011-04-14T18:13:46.753 回答
4

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

于 2012-05-28T16:59:58.780 回答
2

在使用已定义模板化类的 C++ 项目中,虽然收到相同的错误,但我在项目导航器中选择了具有已定义模板化类的.cpp 文件,然后删除 > 删除引用。此外,相关的 .h 文件虽然仍然在项目中被引用,但需要对 .cpp 有一个#include 语句,如下所示:

#ifndef __CircularBuffer__CircularBufferT__
#define __CircularBuffer__CircularBufferT__

... snip ...

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

如果你想看,一个简单的项目示例在 github 上

这有点间接技巧,我不记得这个解决方法的原始来源。

于 2012-10-11T06:35:39.890 回答
2

如果这个错误突然出现,说明项目缺少一些框架。库和相关项目可能需要框架,因此如果您最近添加了一个,则可能会导致此错误。

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

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

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

于 2012-11-29T13:55:23.557 回答
2

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

我在说明页面中注意到了这一点:

在此处输入图像描述

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

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 文件,请仔细检查示例代码源或其他内容,并确保它已实际应用..在我的情况下未正确应用

于 2013-01-14T13:47:48.930 回答
0

发生这种情况的另一个原因是您升级 SDK 时。

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

于 2012-08-24T14:33:01.080 回答
0

我使用了 CLGeocoder 而不添加 Core.Location 框架。基本上,此错误可能意味着多种情况。我希望这对其他人有帮助。

于 2013-08-29T05:50:25.823 回答
0

我之前被这个难住了,才意识到我添加了一个纯数据@interface 并忘记添加空的@implementation 块。

于 2014-02-08T01:34:15.857 回答
0

在 Xcode 11 中遇到此问题,修复将最小部署目标从 10.0 更改为 11.0,希望这可以帮助某人:)

于 2020-07-17T08:09:30.350 回答