导读
正题
今天主要讲一下OC与C和C++混编的问题
首先说一下C++文件:
单独把C++文件导入到文件中只要语法没有错误,是能够正常编译的,但是如果你要调用这个C++文件的函数或者对象的方法就会报错,报如下错误:
这个错误很经典,解决办法就是在调用C++函数或者对象方法的所在OC文件(.m)将后缀.m改成.mm即可。
其次说一下C文件
如果我们在同一个.m文件中调用了调用了C++又调用了C函数,那么这也会报上述的错误,那么该如何解决呢?
解决办法:
先将此文件改成.mm,然后创建一个继承自NSObject的类文件,在此类文件中调用C语言函数,然后再在需要.mm文件中所需调用C的位置再调用继承自NSObject的类方法或者对象方法即可。
总结
- 在 OC 中调用 C++ 代码时,需要将 OC 代码所在的 .m 文件后缀名修改为 .mm。
- 在 OC 的 .mm 文件中调用 C 代码,需要将 C 代码所在的文件后缀名(通常为 .c)修改为 .mm,或者建一个中间的OC类调用C代码即可。
- 有时候可能需要在 Build Settings -> Other Link Flags 添加 -lstdc++。
- 甚至可能需要导入C++系统库libstdc++.tbd
以上!!!