学科:IOS/KB/编译错误

来自维基学院

Undefined symbols for architecture ...[编辑 | 编辑源代码]

示例:

   Undefined symbols for architecture armv7:
   "_OBJC_CLASS_$_MFMessageComposeViewController", referenced from:
   l_OBJC_$_CATEGORY_MFMessageComposeViewController_$_BlocksKit in BlocksKit(BlocksKit)

原因:

这是编译器找不到符号定义,通常这意味着某些framework没有加入项目中

解决参考:

解读信息,是因为找不到叫MFMessageComposeViewController的ObjC类。
查找MFMessageComposeViewController的信息,得知其定义在MessageUI.framework中,将其加入到项目中即可


Receiver 'ClassName' for class message is a forward declaration[编辑 | 编辑源代码]

相似的还有:Receiver type 'ClassName' for instance message is a forward declaration

可能原因:

解决参考:

类是用 @class 方式引用的?尝试在实现部分用 #import 方式引用。


多语言混编错误[编辑 | 编辑源代码]

多语言混编处理不当可能会引起:

  • Expected * before *: Expected '=',',',';','asm' or '__attribute' before '<' token
  • LLVM GCC 4.2 Error: Cannot find protocol declaration for 'class'
  • 待补充

可能原因:

文件处理不当(同一个文件混用多种语言的写法,后缀设置不当,如ObjC++文件没用.mm后缀)导致编译器判断语言出错

解决参考:

如果能改好文件的话,那就改正吧。否则可以尝试强制编译器按指定类型编译