今天DouDou遇到了一个让他抓狂的问题,由于一些抽出来的方法不需要依赖任何属性,为了节约开销,他把这些函数都写成C函数,然后在Objective-C里调用,结果总是报 symbol(s) not found for architecture i386这个error,找了半天也没找出哪里错了。google这次也没能帮阿拉解决问题。
话说最后小幻自己写了个测试工程发现做法是没有问题的,问题就在于DouDou建了两个头文件,然后以为改了一个的后缀变成.m就可以了,结果发现原来Xcod不是那么好骗的。so,要么建.m文件,把里面的实现删掉写自己东东,要么直接建成.c文件,然后把后缀改成.m,源文件就是源文件,头文件不可以冒充滴~
Xcode,史上最智能编译器,DouDou如是说。
再来说说混编这点事儿,如果文件太多,一个个改后缀总是麻烦,有人说可以生成静态库,小幻还没用过那么大量的模块移植,所以没做过,就记录下,如果以后遇到了,也知道往哪个方向去做。
网友jimney的个人总结(原文来自Cocoachina论坛,转帖请注明)
1、仅Objective-C与C混编
1) .m开头包含c头文件
2)直接使用
2、仅Objective-C与C++混编
1)修改要包含的.m文件类型为.mm
2) .mm中包含c++头文件
3)创建c++类对象,并初始化,调用其成员函数
3、Objective-C C 、C++混编
1)同时修改.c .cpp以及要包含的.m三个文件类型都为.mm
2)使用时,直接调用,c++则先创建对象并初始化,然后调用其成员函数
关于第三种,使用范例如下:
CPrint.h
void printHellow(); CPrint.mm(已修改)
|