學科: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後綴)導致編譯器判斷語言出錯

解決參考:

如果能改好文件的話,那就改正吧。否則可以嘗試強制編譯器按指定類型編譯