1. 程式人生 > >iOS開發,匯入c檔案引發的Could not build module 'Foundation'問題(轉)

iOS開發,匯入c檔案引發的Could not build module 'Foundation'問題(轉)

iOS開發,匯入c檔案引發的 Unknown type name ‘NSString’ 問題

今天看到個問題,編輯工程提示Unknown type name ‘NSString’,如下圖

這裡寫圖片描述

導致出現異常的原因是是因為工程中添加了ZipArchive(第三方開源解壓縮庫)

這裡寫圖片描述

一般情況下出現“Unknown type name”是標頭檔案互相引用出現的,這裡可以排除,由於原始碼使用是c\c++與oc混編,

考慮新的XCode編譯檔案型別導致的,嘗試了幾種方案,下面三種可以解決問題。

解決方案一:

選擇所有.c檔案,將屬性的 identity and type 改為Objective-C Source。
這裡寫圖片描述

解決方案二:

選擇所有.c檔案,將.c修改為.m

這裡寫圖片描述

解決方案三:

將Compile Sources As 改為 Objective-C++
這裡寫圖片描述

方案三由於修改所有檔案的編譯型別,所有可能會導致其他包括c、c++程式碼的提示錯誤,不過都是些的提示異常,按提示修改即可。

這裡寫圖片描述

另外,新增第三方庫一般步驟分三步:
1)拖入庫資料夾,copy一份加入自己的專案
2)新增庫所需要的框架或者動態連結庫
3)ARC下修改編譯屬性 -fno-objc-arc
但是今天加入zipArchive ,按步驟加入,增加libz動態庫,修改-fno-objc-arc一下報了23個錯誤(汗 too many errors emitted, stopping now),都是 expected identifier or ‘(’ ,unknown type name ‘NSString’,could not build module ‘Foundation’,could not build module ‘UIKit’。
通過百度,stackOverflow上找到解決方法:
在所在專案pch檔案中,把自己所#import的標頭檔案做如下操作
#ifdef OBJC


#import
#endif
分析了一下,zipArchive庫是C OC C++檔案混編,pch裡面自加的標頭檔案是全域性性的,當在C檔案import時其實是沒有意義的,也就是問題出處,所以要ObjC區分開編譯,這樣總是就解決了。