架构i386的未定义符号:_OBJC_CLASS _ $ _ SKPSMTPMessage“,引用来自:错误

我已经导入了从后台应用程序发送电子邮件的框架,即SKPSMTPMessage框架。 有人可以build议为什么显示下面的错误

 Undefined symbols for architecture i386: "_OBJC_CLASS_$_SKPSMTPMessage", referenced from: objc-class-ref in ConfirmController.o "_kSKPSMTPPartContentTransferEncodingKey", referenced from: -[ConfirmController sendEmail] in ConfirmController.o "_kSKPSMTPPartMessageKey", referenced from: -[ConfirmController sendEmail] in ConfirmController.o "_kSKPSMTPPartContentTypeKey", referenced from: -[ConfirmController sendEmail] in ConfirmController.o ld: symbol(s) not found for architecture i386 collect2: ld returned 1 exit status 

来自哪个框架的来源: –

lockingMFMailComposeViewController中的字段

更新

答:只需将文件夹拖放到项目上,然后单击“复制”。 那是它select项目checkbox和目标checkbox以及。

如果您的类的.m文件没有在您的目标的“构build阶段”选项卡的“编译源”步骤下列出,您可以得到这种types的错误。 通常Xcode会为你做这件事,但是有时它会丢失情节,你需要手动添加.m文件。

去做这个:

TargetSettings – >构build阶段 – >编译源 – >添加您的.m类 – >生成并运行

对我来说,这个问题竟然是缺less框架。 一旦我join他们,它的工作。

检查有效的体系结构并构build仅有的体系结构属性。

在这里输入图像描述

如果您使用的是cocoapods,请确保您的目标的构build设置在其他链接器标志部分包含$(inheritance)

在这里输入图像描述

你的框架为armv(x)编译? 它看起来像它是编译为i386,哪些代码不会在iOS设备上运行。 否则,它被编译为armv(x),你正在试图在模拟器上运行它,这是i386代码。 确保使用上面显示的构build设置Akshay,您的框架已经正确地编译为要运行的芯片。

如果你在xcode中导入一些其他项目,并且当前和导入项目在Compiler源文件中都有相同的文件,那么只需在“Build阶段”设置中删除当前项目中的相同文件即可。

是的,这与allen所说的有关…在源文件的Utilities部分寻找TargetMembership。 有一个checkbox将该文件关联到项目。 检查这也解决了这个问题。

也可能是因为缺less链接到二进制库,检查在您的目标添加所需的库,然后产品>清洁产品>构build阶段

那也一定有用!

当我打开同一个项目两次时,我遇到了这个问题,只有一个项目是原始的,另一个是从git url克隆的。

“产品”>“清洁”解决了这个问题。

我也遇到了这个问题,我通过检查是否编译源文件和链接二进制文件包含所需的所有文件/库/框架来解决这个问题。

在这里输入图像描述

当我遇到同样的问题时,

架构i386的未定义符号:

_OBJC_CLASS _ $ _ SKPSMTPMessage,引用自:ConfirmController.o中的objc-class-ref

原来,我只是忘了添加框架。 这是QuartzCore.framework是确切的。

最后试试这个:

所以我尝试了这个页面上的所有build议..没有工作..我的问题开始的方式是按照本教程中的步骤教导如何链接静态库。 与我的示例项目的指示工作正常..但是,然后在我的实际项目,我开始得到上述错误。

所以我所做的是通过上述教程的每一步,并在每一步后build立.. 违规行竟然是这一个:join-all_loadbuild立设置 – >其他链接器标志

事实certificate,这个标志曾经被build议一次将类别链接到静态库..但事后certificate ,这个标志不再是必要的Xcode 4.2 + ..(同样去的-force_load标志..这也是在其他职位推荐)..

当我遇到同样的问题,我忘了添加“编译版本的库(扩展名为.a)”。 通常情况下,我们在导入项目的目标依赖关系中添加了导入项目的库,但是我们忘记了在“构build阶段”中的“链接二进制库”中添加“编译库”。

如果别人有同样的问题,加上我的工作,并在这里结束。 我有一个旧的项目,CLANG_ENABLE_MODULES设置设置为否经过几个小时的挫折,我相比,一个工作的项目,发现我有启用模块设置为否在我的LLVM构build设置。 设置为是解决了我的问题,应用程序生成的罚款。

项目设置 – >生成设置 – >search“模块”和更新启用模块(C和Objective-C)为YES。

我没有将“-all_load -lstdc ++”添加到构build设置中的其他链接器标志,我能够启动SIM,没有错误,但启动时没有获得MonkeyTalk日志输出,而且之前编写的用于连接的脚本现在显示播放button被禁用。 MT IDE的输出显示为“连接设置为iOS模拟器”,但无法select运行/播放button。

原来的项目在其他链接标志中有“ObjC -all_load”,当我附加“-all_load -lstdc ++”时,我得到了这个post的错误信息。 当我删除了“ObjC -all_load”并且只添加了“-all_load -lstdc ++”这个项目的时候,但是仍然没有猴子说​​话注销作为确认在控制台中

有可能你正在使用一个只为REAL硬件编译的库。 例如,如果您使用的是像Zephyr HxM Smart这样的蓝牙库,则可能无法在模拟器上编译,只能在真实设备上运行。

进入IOS 6的类似问题。能够解决它通过添加storekit.framework到“Link Binary with Libraries”在构build阶段部分。

现在,它就像一个魅力。

当我添加PSTCollectionviewcontroller时,我有同样的问题与7错误。解决这个问题的一个方法是检查你的“Xcode – >编译阶段 – >编译源代码”在这里添加你的所有“.m”文件..我希望你后期会帮助用户。

在我的项目中,我使用Cocoapods进行增强现实项目,我发现当你实现cocoapods并打开你的项目的.workspace时,你最终得到的是Xcode Project目标,而这些目标是在同一个文件中实现的。 发生了什么事情是,有一些.m被两个使用。 在构build阶段>>编译源代码中删除重复的Xcode目标后,它工作正常。

在尝试升级到新的Google Analytics(分析)资料库时,我发现了这个极具误导性的讯息。

在我的情况下,问题是有两个冲突的图书馆副本 。 他们在不同的文件夹,但都列在我的应用程序库构buildpath(在生成设置下)。

将所有已弃用的库文件移出文件夹,最终导致了这个诡计,并使神秘的错误信息消失。

检查您的所有捆绑资源是否在构build阶段被复制。

产品=>清洁对我来说是诀窍

答案是你只需拖放项目文件夹,然后单击复制。

当我从另一个项目拖放一些源文件时,我收到了这条消息。 当我删除它们,然后通过文件菜单中的“添加文件…”添加它们,它没有出现错误。

我有一个与NSManagedObject类似的错误,这是因为我使用的是核心数据,但在构build阶段 – 链接二进制与库,缺less核心数据框架,如其他一些人已经回答

如果您在您的项目中添加第三方库,需要本地框架不包含在您的项目中,您可以得到这种types的错误。

您需要查看新添加的库的.h和.m文件,并查看它需要的框架,然后将这些框架包含在您的项目中(目标>构build阶段>链接二进制库)。

尝试删除框架,干净的项目,将其添加回来并编译。 或者在编译源码中删除已经被xcode添加的类,清理项目,将其添加回去然后构build。

记住你可以在任何视图控制器中调用你已经删除的文件。

该应用程序不会显示任何错误,直到您构build您的应用程序,它会在编译阶段在.o文件中引发错误。

请记住删除任何正在调用您已删除的文件的MACRO。

谢谢 :)

除了Allan所做的,添加缺less的类,我遵循@ emdog4的解决scheme,并添加了核心数据库,在Xcode中的构build阶段和“链接二进制与库”下点击+并select“CoreData.framework” 。 这整理了我的错误

就我而言,情况有点不同

在前缀头文件中有一个定义缺失

 #ifdef DEBUG # define TWDLog(fmt, ...) NSLog((@"\n%s\n" fmt), __PRETTY_FUNCTION__, ##__VA_ARGS__) #else # define TWDLog(...) #endif 

因此,searchPROJECTNAME-Prefix.pch并检查两个项目中是否有缺失