首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 其他教程 > 其他相关 >

混编中碰到的搞笑事件

2012-07-16 
混编中遇到的搞笑事件http://hi.baidu.com/%BD%C7%C2%E4%C0%EF%B5%C4%C3%A8/blog/item/181ff08bfe05780ec8

混编中遇到的搞笑事件

http://hi.baidu.com/%BD%C7%C2%E4%C0%EF%B5%C4%C3%A8/blog/item/181ff08bfe05780ec8fc7a25.html

?

今天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(已修改)

?#include "CPrint.h"?void printHellow(){printf("C  hello!\n");}?
CPPPrint.h

?class CPPPrint{public:    CPPPrint();    ~CPPPrint();    void printHellow();?};?
CPPPrint.mm(已修改)
?#include "CPPPrint.h"?CPPPrint::CPPPrint(){}?CPPPrint::~CPPPrint(){}?void CPPPrint::printHellow(){printf("CPP  hello!\n");?}?
***ViewController.mm
?-(void)viewDidLoad {[super viewDidLoad];?    //call in c style    printHellow();?    //call in cpp style    CPPPrint cppPrint;    cppPrint.printHellow();}?
工程例子下载:MixProgramTest.zip

热点排行