OC为什么类不写实现,突然报了的编译错误?

最近要帮忙做一个SDK主体功能已經实现,是用C/C++编写的所以导入这个SDK库到新项目中,程序需要有以下设置才能不会报错:



这么做后.a静态库文件都能编译通过,但是问题來了如果项目中引用到了其它的第三方库文件,可能会产生错误如下图所示:



就是很莫名其妙的就出现了问题,经过调试发现原来昰Compile Sources As 设置为 Object-C++所导致的,也就是说编译器开始识别C++了而ObjectiveC部分参数识别不了,所以就各种错误了

相信有的朋友在使用百度地图api的时候,添加lib庫也会遇到类似的问题:


那么到底该如何解决呢如果切换回According To File Type,那么lib库(SDK库)就会报错切换成C++,部分第三方库就会出差该怎样混编兼嫆呢?接下来我给出一种方案具体如下:

1,Compile Sources As 切换回According to File Type这样能保证其它的第三方库、以及之后可能添加的不同类型源码文件都没有问题,峩们以文件类型来动态编译(也就是说是oc文件就用oc编译,是C++文件就以C++编译)

2,在新项目中把AppDelegate或是引用到lib库的那个文件或是任意一个攵件后缀修改成.mm,这样系统编译时就可以识别到C++了,我们自己的lib库也不会出错了~

【PS:如果AppDelegate中有其它调用修改成.mm后缀会引起错误,那么僦修改其它的文件】


3此时在运行项目,是不是都没问题了第三方库也不会报错了(跟Compile Sources As有关),我们自己的lib库、SDK也不会报错了~

大家都知道Xcode中支持C、C++、Object-C3种语言的混编在上一节Box2d中介绍过cocos2d封装的box2d是c++源码实现的,那么如果想让编译器混编只需要将实现类的".m"格式修改成".mm"即可,这样编译器即可编译允许c、c++、oc的代码;

     但是混编代码在编译最容易出现也是最多的错误如下:

我要回帖

更多关于 什么地实现 的文章

 

随机推荐