oc和c/c++混编的一些坑

今天导入了一个第三方的库,库包含了.c文件。编译就各种报错。。。


网上查一下原因,应该就是c/c++混编的问题了,找到了几个解决办法:


大概看了一下,主要分为两种报错,先看看报出来的错误:

1. Unknown type name "NSString"

2. Could not build module 'Foundation'


先说说第一个报错:(尝试了第一个解决方法成功解决)

一般情况下出现“Unknown type name”是头文件互相引用出现的,这里可以排除,由于源码使用是c\c++与oc混编,

考虑新的XCode编译文件类型导致的,尝试了几种方案,下面三种可以解决问题。

 

解决方案一:

选择所有.c文件,将属性的 identity and type 改为Objective-C Source。

解决方案二:

选择所有.c文件,将.c修改为.m

 

解决方案三:

将Compile Sources As 改为 Objective-C++

方案三由于修改所有文件的编译类型,所有可能会导致其他包括c、c++代码的提示错误,不过都是些的提示异常,按提示修改即可。



在看看第二个报错:

情况一:导入文件类:(如.pch文件)

1 , 检查pch 是否导入头文件 , 导入是否可用  ;

2,解决:在引用头文件开始加入#ifdef __OBJC__ 结束时加入#endif,例如

#ifndef PureStandard_PrefixHeader_pch

#define PureStandard_PrefixHeader_pch

#ifdef __OBJC__

#import "A.h"

#import "B.h"

#endif

#endif


情况二:系统文件(Xcode文件)被修改

可能性:UIKit等库损坏或被修改(貌似ios5以上不能修改,一改就坏),也就是你查看Xcode编译器系统文件(也就是NSString之类的内部文件)时不小心改了

解决:

1,根据记忆,看看自己这段时间点进去查看了那些系统类的属性,点进系统类去,按“Command +Z” 撤销修改(如果有修改的话);

(情景提示:错误出现原因,比如你按Command键并把鼠标移到NSLog上,点击去查看属性,翻来滚去不小心改了某些内容)

2,根据左边错误提示,点击红点错误去到相应的文件,按“Command +Z” 撤销修改(如果有修改的话);

3,出现问题通常通过删除moduleCache就可以了,这也是网上通常的做法;也可以试试Xcode头顶的选项 product --> clean  一下试试;

(moduleCache目录: /Users/userName/Library/Developer/Xcode/DerivedData/ModuleCache  

其中路径中userName通常是mac的用户名,这个目录会有点乱,找到/ModuleCache就好)

4,在本机上无论如果多次删除moduleCache都无效,去向别的正常Xcode拿个.h文件(怀疑被修改的)替换自己Xcode的文件;

5,最后一个解决办法:没办法的办法,花十几分钟重装一下Xcode。



我的是第一种情况,因为项目中有c/c++文件,避免pch把这些文件导进这些文件里,需要用OBJC隔开


你可能感兴趣的:(oc和c/c++混编的一些坑)