symbol(s) not found for architecture i386

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

不知道是什么意思。

187661 次浏览

If you get this sort of thing appearing suddenly, it usually means the project is missing some frameworks it needs. Libraries and dependent projects can require frameworks, so if you've added one recently then that can cause this error.

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

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

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

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

那就一直这么做,直到成功。

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

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

瞎猜的。

You are using ASIHTTPRequest so you need to setup your project. Read the second part here

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

我使用以下方法(对于 XCode 4)解决了这个问题:

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

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

3)选择“具有库的链接二进制文件”选项

4)添加你正在获得的框架

5) Move the framework from main folder to the frameworks folder

6)重新构建它,错误就消失了。

另一种可能导致此问题的情况是,如果您的代码调用 C + + ,或者被 C + + 代码调用。我自己也有问题。文件的实用程序函数在从 Obj-C 调用时显示为“未找到符号”。修正的方法是改变文件类型: 在 Xcode 4中,使用扩展信息面板将文件类型设置为“ Objective-C + + Source”; 在 Xcode 3中,使用“ Get Info”将文件类型更改为“ Source.cpp.objeccpp”。

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

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

有时候,目标文件中缺少源文件。

  1. 检查缺少哪些符号
  2. 目标-> 构建阶段-> 编译源代码
  3. 如果没有列出缺少的源文件,则添加它们
  4. 命令 + b 代表极乐

您可以选择看起来“丢失”的文件,并在右边的工具栏中检查它们的复选框是否为您正在构建的 Target 选中。

Thought to add my solution for this, after spending a few hours on the same error :(

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

原来,我的问题在于删除之后缺少了一个编译类,后来又重新添加了它。

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

在我的情况下,所有公布的解决方案都不起作用。I had to delete the project and make a fresh checkout from the SVN server.幸运的是,这个项目是托管在一个版本控制系统。不然我真不知道该怎么办了。

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

如果您只是删除组,然后拖放新的文件夹项目,“图书馆搜索路径”将有两个 SDK。要解决这个问题,只需删除旧的 SDK 路径。

在使用定义的 模板化了类的 C + + 项目中,当收到相同的错误时,我选择。在 ProjectNavigator 中定义了 模板化了类的 cpp 文件,然后删除 > 删除引用。还有相关的。H 文件,虽然仍然在项目中引用,但需要有一个 # include 语句到。按揭保险计划详情如下:

#ifndef __CircularBuffer__CircularBufferT__
#define __CircularBuffer__CircularBufferT__


... snip ...


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

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

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

通过更改目标的 全部构建设置 > 体系结构,我修复了项目中的一个类似错误。

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

原因(就我而言) : 我的项目有多个目标,即使 主要目标的构建设置 > 架构设置包括 armv7s 架构,主要目标依赖于另一个目标(在构建阶段 > 依赖项下列出) ,我没有想过重置构建设置 > 架构为另一个目标,我必须改变它包括 armv7s。 我认为模拟器和设备运行在不同的架构上,这就是为什么模拟器可以而设备不可以的原因。

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

To add frameworks, right click on the project name in the project view, select Add, then select Existing frameworks from the list. Then find the framework with the symbols you're missing.

The other thing is if you added any classes in the compiled resources and removed that classes from the project then the error appears. The best thing to do is remove the classes from the compile resources(Build settings--> compile sources) which have removed from the project.

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

这发生在我试图将 PSPDFKIT演示库复制到我的项目中时。我遵循了网站上的所有说明 + 这个页面上的所有建议。.出于某种原因,它一直给出上面的错误,问题是,如果我在错误方法中抓取消息。.它只出现在二进制文件中(显然我没有访问源代码 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 文件,请仔细检查示例代码源代码或其他代码,并确保它已经被实际应用。.在我的案子里应用不当

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

例如,如果 common.m 中的方法定义中显示的错误enter image description here

我使用了一个 CLGeocoder 而没有添加一个核心。位置架构。基本上,这个错误可能意味着很多东西。我希望这能帮到别人。

我以前也被这个问题难住过,最后才意识到我添加了一个只有数据的@接口,而忘记添加空@实现块。

在 Xcode 11中遇到了这个问题,补丁是将最小部署目标从10.0改为11.0,希望这对某些人有所帮助:)