架构i386的未定义符号:_OBJC_CLASS_$_SKPSMTPMessage",引用自:错误

我已经导入框架从应用程序发送电子邮件在后台即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

框架的来源:-

锁定MFMailComposeViewController中的字段

更新:

答案:只需拖放文件夹在项目上,然后单击复制。 这就是选择项目复选框和目标复选框
262603 次浏览

检查有效的架构只构建活动体系结构的属性。

enter image description here

你的框架是为armv(x)编译的吗?在我看来,它是为i386编译的,而i386的代码不能在iOS设备上运行。或者它是为armv(x)编译的,你试图在模拟器上运行它,这是i386代码。使用Akshay上面显示的构建设置,确保您的框架为将要运行的芯片正确编译。

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

如果你的类的.m文件没有列在目标的“Build Phases”选项卡的“Compile Sources”步骤下,你就会得到这种类型的错误。通常Xcode会为你做这个,但有时它会丢失图形,你需要手动添加.m文件。

这样做:

TargetSettings ->构建阶段->编译源->添加你的。m类->构建和运行

是的,这和艾伦说的有关…在源文件的Utilities部分中查找TargetMembership。有一个复选框将该文件与项目关联起来。检查这个也为我解决了这个问题。

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

对我来说,问题在于缺少框架。一旦我加入em,它就起作用了。

如果你在xcode中导入其他项目,如果当前项目和导入项目在编译器源中都有相同的文件,那么只需在“构建阶段”设置中删除当前项目中的相同文件。这对我很管用。

也可能是你没有链接到二进制库,在你的目标中检查构建阶段,添加所需的库,然后 产品>洁净 Product > Build

. Build

那一定也有用!

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

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

最后试试这个:

所以我尝试了本页上的所有建议。没有工作. .我的问题开始的方式是遵循教程中的步骤,该教程教授如何链接静态库。与我的样本项目说明工作良好..但后来在我的实际项目中,我开始得到上面的错误。

所以我所做的是通过所述教程的每一步,并在每一步之后构建。出现问题的行原来是这样的: 添加-all_load构建设置->其他链接标志

原来这个标志曾经是推荐,用于将类别链接到静态库。但是后来Xcode 4.2+不再需要这个标志了。(同样适用于-force_load标志..这也是在其他的帖子中推荐的)..

在IOS 6中遇到类似的问题。 可以通过添加storekit.framework到构建阶段部分的“Link Binary with Libraries”来解决这个问题

现在,它就像一个魔法。

当我遇到同样的问题时:

架构i386的未定义符号:

_OBJC_CLASS_$_SKPSMTPMessage,引用自ConfirmController.o中的objc-class-ref

结果我忘记添加框架了。确切地说,是QuartzCore.framework。

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

enter image description here

当我遇到同样的问题时,我忘记添加“编译版本的库(扩展名为.a)”。通常我们会在Build Phases的Target Dependency中添加导入项目的库,但是我们忘记在Link Binary with Libraries in Build Phases中添加“compiled library”。

我没有在构建设置中添加“-all_load -lstdc++”到其他链接器标志,我能够启动sim没有错误,但我没有得到MonkeyTalk日志输出时启动,我以前写的用来连接的脚本现在显示播放按钮为禁用。MT IDE的输出显示为“连接设置到iOS模拟器”,但不能选择运行/播放按钮。

原来的项目有“ObjC -all_load”在其他链接器标志,当我附加了“-all_load -lstdc++”随着它,我得到了这篇文章的错误消息。当我删除了“ObjC -all_load”,只添加了“-all_load -lstdc++”项目构建,但仍然没有monkey talk log out作为控制台的确认

当我添加PSTCollectionviewcontroller时,我有同样的7个错误的问题。这个问题的一个解决方案是检查你的“xcode ->构建阶段->编译源”在这里添加你的所有”。M”文件..希望这篇文章对今后的用户有所帮助。

我在NSManagedObject中也有类似的错误,这是因为我正在使用核心数据,但在构建阶段中缺少核心数据框架-链接二进制库,就像其他人回答的那样

如果您在项目中添加了第三方库,而这些库需要项目中未包含的原生框架,则可能会出现这种类型的错误。

您需要查看新添加的库的.h和.m文件,并查看它需要什么框架,然后将这些框架包含到您的项目中(Target > Build Phases > Link Binary With Libraries)。

有可能您使用的库仅为REAL硬件编译。例如,如果您正在使用像Zephyr HxM Smart这样的蓝牙库,它可能不会在模拟器上编译,而只能在实际设备上运行。

尝试删除框架,清理项目,添加回来并编译。 或 删除xcode在编译源代码中添加的类,清除项目,然后将其添加回来,然后build.

记住,你可以在任何视图控制器中放一些宏它会调用你已经删除的文件。

在你构建应用程序之前,应用程序不会显示任何错误,它会在编译阶段在.o文件中抛出错误。

记得删除所有调用已删除文件的MACRO。

谢谢:)

在我的项目中,我在一个增强现实项目中使用Cocoapods,我发现当你实现Cocoapods并打开你的项目的。workspace时,你最终会得到Xcode项目目标和那些你在同一个文件中实现的Pods目标。当时的情况是,有些。m同时被双方使用。当我在Build Phases >> Compile Sources中删除了Xcode目标的重复部分后,它工作得很好。

除了Allan所做的,添加缺少的类,我遵循@emdog4的解决方案,通过在Xcode中构建阶段并在“链接二进制库”下单击+并选择“CoreData.framework”来添加核心数据库。这纠正了我的错误

我的情况有点不同

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

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

因此,搜索PROJECTNAME-Prefix.pch并检查它是否在两个项目中都缺少一些东西

当我试图升级到新的谷歌分析库时,我发现了这个高度误导的消息。

在我的情况下,问题是有两个相互冲突的副本的库。它们在不同的文件夹中,但都列在我的应用程序的库构建路径(在构建设置下)中。

将所有已弃用的库文件移出文件夹最终达到了目的,并使神秘的错误消息消失了。

在构建阶段检查是否复制了所有的bundle资源。

补充对我有用的东西,以防其他人有同样的问题,并最终在这里结束。我有一个旧的项目,CLANG_ENABLE_MODULES设置为No。经过几个小时的挫折,我比较了一个工作项目,发现我已经在我的LLVM构建设置下启用模块设置为no。将此设置为Yes解决了我的问题,应用程序构建良好。

项目设置->构建设置->搜索“模块”并更新启用模块(C和Objective-C)为YES。

清洁对我来说很管用

我也有同样的问题。我添加了2个框架,我需要构建阶段。 希望这对你有所帮助! symbol(s) not found for architecture i386

.

在我的案例中,pod更新并没有以某种方式更新项目。所以我必须自己做,添加MBProgressHud到OtherLinkerFlags。

enter image description here

如果你正在使用cocoapods,确保你的目标的构建设置在其他链接标志部分包含$(继承)

enter image description here

以上答案没有一个能解决我的问题。当我将Xcode升级到8后,我得到了同样的错误,我去目标—> 构建阶段—> 链接二进制与库,删除导致问题的框架,并重新添加它,所有错误都消失了。希望这对其他人有所帮助。 enter image description here < / p >

主动架构的变化对我很有用,我的一个库使用i386。

建立设置 >>中,将只构建活动架构从NO更改为是的

这对我很管用。希望这对其他人也有帮助。

enter image description here

只需启用“仅构建活动架构”选项

>> Build Settings >> Build Active Architecture Only >>是

截图of the path to the configuration . sh >截图of the path to the configuration . sh

记住检查它们是否也在每个目标中启用