符号(S)未findbuild筑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**
不知道这是什么意思。
您正在使用ASIHTTPRequest,因此您需要设置您的项目。 在这里阅读第二部分
如果突然出现这种情况,通常意味着项目缺less一些所需的框架。 库和从属项目可能需要框架,所以如果您最近添加了一个,那么可能会导致此错误。
要添加框架,请右键单击项目视图中的项目名称,selectAdd
,然后从列表中selectExisting frameworks...
然后find你丢失的符号框架。
至于你如何find你需要的框架,我发现使用谷歌最简单,虽然你可能也可以使用Xcode帮助search。 search其中一个符号,尽可能找出未SCNetworkReachabilityGetFlags
名称(例如, SCNetworkReachabilityGetFlags
),然后在developer.apple.com上find的第一个文档链接通常是正确的。 你通常不必打猎很远。 在这种情况下,就是这个页面:
https://developer.apple.com/documentation/systemconfiguration/scnetworkreachability-g7d
然后在页面的顶部,它告诉你使用哪个框架,在这种情况下是SystemConfiguration
。 所以把它添加到项目中,然后重新编译。
然后继续这样做,直到它工作…
编辑:我从来没有使用模拟器,但这是你在设备上做的 – 我认为它是一样的…
有时会有源文件从目标中丢失。
- 检查哪些符号丢失
- 目标 – >构build阶段 – >编译源代码
- 如果未列出,请添加缺less的源文件
- 命令+ b为幸福
您可以select似乎“丢失”的文件,并在右侧的实用工具栏中选中您正在构build的目标的checkbox。
我解决了它使用以下方法(对于XCode 4):
1)在项目导航窗口中select项目,在右侧显示项目摘要
2)select第4个标签生成阶段
3)select链接二进制与库选项
4)添加你得到的框架
5)将框架从主文件夹移动到框架文件夹
6)再次构build,错误消失。
想到为此添加我的解决scheme,花了几个小时后,相同的错误:(
上面的人是正确的,你应该检查的第一件事是你是否错过了添加任何框架,请参阅上面的Pruthvid提供的步骤。
事实certificate,我的问题是删除了一个编译类后丢失了,之后又重新添加了。
检查所报告的错误类别的“编译源”。 添加您创build的任何缺失的类。
问题是应用程序目标缺less添加字段的目标成员资格。因此,select该文件并将复选标记添加到目标成员资格的框中
例如,如果common.m中的方法定义中显示的错误
确保缺less的框架实际上列在“目标/构build阶段/链接二进制库”下,如果不是只是添加它。 如前所述,它通常表示缺less框架。
在我的项目中列出了两个相同的框架,当我删除其中一个我有这个错误,因为它也从“链接二进制库”列表中删除它。 我加回来,问题消失了(我还有两个框架列出)
我通过更改我的所有目标的“ 构build设置”>“体系结构”来修复我的项目中的类似错误。
问题:当我从Xcode 4.4升级到Xcode 4.5时,我的项目仍然在模拟器上编译好,但是没有在设备上编译。 在设备上,它抛出错误“架构armv7s找不到的符号”,以及误导性的“苹果Mach-O链接器错误”和“铿锵:错误:链接器命令失败,退出码1(使用-v看到调用)“。
原因(在我的情况下):我的项目有多个目标,即使主目标的构build设置>架构设置为包含armv7架构,主要目标依赖于另一个目标(列在“构build阶段”>“依赖关系”下)我没有想过重置那个其他目标的构build设置>架构,我不得不改变,以包括armv7s。 我猜想模拟器和设备运行在不同的架构上,这就是为什么模拟器没问题。
您的项目是否依赖于另一个项目,并且该项目中的目标是否成为您主要目标的直接依赖? 如果是这种情况,并且依赖关系没有设置,依赖目标可能不会为所有configuration(即模拟器)
只是一个疯狂的猜测。
可能导致此问题的另一种情况是,如果您的代码调用到C ++,或由C ++代码调用。 从Obj-C调用时,我遇到了一个自己的.c文件的效用函数,显示为“找不到符号”。 解决方法是更改文件types:在Xcode 4中,使用扩展信息窗格将文件types设置为“Objective-C ++ Source”; 在Xcode 3中,使用“Get Info”将文件types更改为“source.cpp.objcpp”。
在我的情况下,没有发布的解决scheme工作。 我不得不删除这个项目,并从SVN服务器上重新签出 。 幸运的是,这个项目是在一个版本控制系统中进行的。 不知道我会做什么,否则。
在使用已定义的模板化类的C ++项目中,在接收到相同的错误时,我使用Project Navigator中定义的模板化类select了.cpp文件,然后selectDelete> Remove Reference。 此外,在项目中仍然引用的相关.h文件需要对.cpp具有#include语句,如下所示:
#ifndef __CircularBuffer__CircularBufferT__ #define __CircularBuffer__CircularBufferT__ ... snip ... #include "CircularBufferT.cpp" #endif /* defined(__CircularBuffer__CircularBufferT__) */
如果你想看,一个简单的项目的例子是在github上 :
这是一个间接的诡计,我不记得这个解决方法的原始来源。
如果这个错误突然出现,这意味着该项目缺less一些框架。 库和从属项目可能需要框架,所以如果您最近添加了一个,那么可能会导致此错误。
要添加框架,请右键单击项目视图中的项目名称,select添加,然后从列表中select现有框架。 然后find你丢失的符号框架。
另一件事情是,如果你在编译的资源中添加了任何类,并从项目中删除了这些类,那么就会出现错误。 最好的办法是从编译资源中删除类(生成设置 – >编译源),这些类已经从项目中删除。
在我的情况下,我已经在项目中添加了admob类并编译了项目。 在后来的情况下,我不想在我的项目中包含admobs,所以我从我的项目中删除了admob类的引用。 发生这个错误时,我从编译资源中删除了admob的.m类,解决了这个问题。
试图将PSPDFKIT演示库复制到我的项目中时,发生了这种情况。 我遵循网站上的所有说明+本页面上的所有build议..出于某种原因,它不断给出上述错误,问题是,如果我在错误的方法grepped消息..它只出现在二进制显然我没有访问源代码B / C我必须支付)。
我注意到这个在说明页面虽然:
所以我去了该configuration文件的胆量,发现这一点:
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
然后我去了上述图书馆作者提供的示例项目,注意到之前的标记在我的构build设置中逐字复制到了其他链接器标志中..但是在我的项目中,他们不是!我只是复制和粘贴到我的项目的构build设置其他链接器标志和一切工作!
拿走点:如果你是依靠你的设置一些.xcconfig文件,仔细检查一个示例代码源或其他东西,并确保它已被实际应用..它没有适用于我的情况
这可能会发生的另一个原因是当你升级一个SDK。
如果您只需删除该组,然后将新文件夹拖放到项目中,则“库searchpath”将包含这两个SDK。 要解决,只需删除旧的SDKpath。
我曾经使用过CLGeocoder而不添加Core.Location框架。 基本上这个错误可能意味着多个事情。 我希望这可以帮助别人。
我被这一个难住之前,才意识到我添加了一个只有数据的@接口,忘了添加空的@implementation块。