我已导入用于从后台应用程序发送电子邮件的框架,即SKPSMTPMessage
框架。有人可以建议为什么会出现以下错误
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
采取框架的来源: -
Locking the Fields in MFMailComposeViewController
更新:
答案:只需将文件夹拖放到项目上,然后点击复制即可。 多数民众赞成也选择项目复选框和目标复选框。
答案 0 :(得分:566)
如果您的类'.m文件未列在目标“构建阶段”选项卡的“编译源”步骤下,则可能会出现此类错误。通常Xcode会为您执行此操作,但有时会丢失绘图,您需要手动添加.m文件。
要做到这一点:
TargetSettings - >构建阶段 - >编译源 - >添加.m类 - >构建并运行
答案 1 :(得分:37)
对我来说,问题结果是缺少框架。一旦我添加了em,它就有效了。
答案 2 :(得分:28)
检查有效架构&仅构建Active Architecture属性。
答案 3 :(得分:17)
答案 4 :(得分:10)
您的框架是否为armv(x)编译?它看起来像是为i386编译的,这些代码不能在iOS设备上运行。或者它是为armv(x)编译的,你试图在模拟器上运行它,这是i386代码。使用上面显示的构建设置Akshay确保您的框架已正确编译为您要运行它的芯片。
答案 5 :(得分:7)
如果您在xcode中导入其他项目,并且当前和导入项目在编译器源中都有相同的文件,那么只需在“构建阶段”设置中删除当前项目中的相同文件。它对我有用。
答案 6 :(得分:4)
是的,这与allen所说的有关...在源文件的Utilities部分查找TargetMembership。有一个复选框将该文件与项目相关联。检查这个也解决了这个问题。
答案 7 :(得分:4)
也可能是你错过了链接二进制库,检查Targes中的Build Phases添加所需的库然后 产品>清洁 产品>构建
这也必须奏效!
答案 8 :(得分:4)
最后一次尝试:
所以我尝试了这个页面上的所有建议..没有工作..我的问题开始的方式是遵循this教程中教导如何链接静态库的步骤。使用我的示例项目,说明工作正常..但在我的实际项目中,我开始得到上面的错误。
所以我所做的是完成所述tutorial的每一步,并在每一步之后构建。违规行竟然是这一行: 添加-all_load来构建设置 - >其他链接器标志
事实证明,这个标志曾经recommended一次将类别链接到静态库..但后来它turned out不再需要这个标志Xcode 4.2+ ..(同样如此对于-force_load标志..这也是在其他posts中建议的)..
答案 9 :(得分:4)
当我遇到与此相同的问题时:
架构i386的未定义符号:
_OBJC_CLASS _ $ _ SKPSMTPMessage,引自:ConfirmController.o中的objc-class-ref
原来我忘了添加框架。确切地说是QuartzCore.framework。
答案 10 :(得分:4)
我也遇到了这个问题,我通过检查编译源和链接二进制文件是否包含我需要的所有文件/库/框架来修复它。
答案 11 :(得分:3)
当我遇到同样的问题时,我忘了添加“编译版本的库(带扩展名.a)”。通常我们在Build Phases中的Target Dependency中添加导入项目的库,但是我们忘记在Link Binary中将“编译库”添加到Build Phase中的Libraries。
答案 12 :(得分:3)
添加对我有用的东西,以防其他人遇到同样的问题并最终在这里结束。我有一个较旧的项目,其CLANG_ENABLE_MODULES设置为No。经过数小时的挫折后,我与一个正在运行的项目相比,发现我在我的LLVM构建设置下启用了模块设置为no。将此设置为“是”解决了我的问题,应用程序构建正常。
项目设置 - >构建设置 - >搜索“模块”和更新启用模块(C和Objective-C)为YES。
答案 13 :(得分:2)
我没有在构建设置中将“-all_load -lstdc ++”添加到其他链接器标志中,我能够无错误地启动SIM卡但是在启动时我没有获得MonkeyTalk日志输出,而且我之前写的脚本是用于连接现在显示播放按钮为禁用。 MT IDE的输出显示为“连接设置为iOS模拟器”,但无法选择运行/播放按钮。
原始项目在其他链接器标志中有“ObjC -all_load”,当我附加“-all_load -lddc ++”时,我收到了这篇文章的错误消息。当我删除了“ObjC -all_load”并且只添加了“-all_load -lstdc ++”项目构建,但仍然没有在控制台中将确认的猴子通话输出
答案 14 :(得分:2)
您可能正在使用仅为REAL硬件编译的库。例如,如果你使用像Zephyr HxM Smart这样的蓝牙库,它可能无法在模拟器上编译,只能在真实设备上运行。
答案 15 :(得分:1)
当我添加PSTCollectionviewcontroller时,我遇到了同样的问题。这个问题的一个解决方案是检查你的“xcode - >构建阶段 - >编译源代码”这里添加你的所有“.m”文件。我希望你这篇文章将来会帮助用户。
答案 16 :(得分:1)
与IOS 6陷入类似的问题。 能够通过在构建阶段部分中将storekit.framework添加到“Link Binary with Libraries”来解决它。
现在,它就像一个魅力。
答案 17 :(得分:1)
在我看来,我正在使用Cocoapods进行增强现实项目,我发现当你实现cocoapods并打开你的项目的.workspace时,你最终得到了Xcode Project目标以及那些在你内部实现的目标文件。发生的事情是,两者都使用了一些.m。在Build Phases>>中删除了Xcode目标的重复序列之后Compile Sources,它工作得很好。
答案 18 :(得分:1)
产品=>清洁为我做了诀窍
答案 19 :(得分:1)
答案 20 :(得分:1)
我在尝试升级到新的Google Analytics库时发现了这个极具误导性的消息。
在我的情况下,问题是库的两个冲突副本。它们位于不同的文件夹中,但都列在我的应用程序库构建路径中(在构建设置下)。
将所有已弃用的库文件移出文件夹,最终完成了这一操作,并使神秘的错误消息消失。
答案 21 :(得分:1)
检查是否在构建阶段复制了所有捆绑资源。
答案 22 :(得分:0)
答案 23 :(得分:0)
上述答案都没有解决我的问题。当我将Xcode升级到8后,我得到了同样的错误,我去了目标 - > 构建阶段 - > 链接二进制文件库并删除导致问题的框架并重新添加它,所有错误都消失了。希望这会有助于他人。
答案 24 :(得分:0)
在我的情况下,pod更新没有以某种方式更新项目。所以我必须自己做,将MBProgressHud添加到OtherLinkerFlags。
答案 25 :(得分:0)
我遇到了同样的问题。我添加了构建阶段所需的2个框架。 希望这有帮助!
答案 26 :(得分:0)
在我的情况下,它有点不同
在前缀标题中缺少定义
#ifdef DEBUG
# define TWDLog(fmt, ...) NSLog((@"\n%s\n" fmt), __PRETTY_FUNCTION__, ##__VA_ARGS__)
#else
# define TWDLog(...)
#endif
因此,搜索PROJECTNAME-Prefix.pch
并检查两个项目中是否缺少某些内容
答案 27 :(得分:0)
除了Allan所做的,添加了缺少的课程,我遵循了@ emdog4的解决方案,并通过在Xcode中的Build Phases和在Libraries'的链接二进制文件下添加了核心数据库。点击+并选择' CoreData.framework'。这解决了我的错误
答案 28 :(得分:0)
请记住,您可以在任何调用已删除文件的视图控制器中放置一些宏。
在您构建应用程序之前,应用程序不会显示任何错误,它会在.o文件的编译阶段引发错误。
请记住删除任何调用您已删除文件的MACRO。
谢谢:)
答案 29 :(得分:0)
尝试删除框架,清理项目,添加回来并编译。 要么 删除xcode在编译源,清理项目中添加的类,然后将其添加回构建。
答案 30 :(得分:0)
如果在项目中添加需要项目中未包含的原生框架的第三方库,则会出现此类错误。
您需要查看新添加的库的.h和.m文件并查看它所需的框架,然后在项目中包含这些框架(目标>构建阶段>链接二进制文件库)。
答案 31 :(得分:0)
我与NSManagedObject有类似的错误,这是因为我使用的是核心数据,但在构建阶段 - 链接二进制文件库中缺少核心数据框架,正如其他人已经回答的那样
答案 32 :(得分:0)
当我从另一个项目中拖放一些源文件时,我收到了此消息。当我删除它们然后通过“文件”菜单中的“添加文件...”添加它们时,它构建时没有错误。
答案 33 :(得分:0)
答案是,您只需将文件夹拖放到项目上,然后单击“复制”即可。