Hello,world!

文科的格调 + 工科的背景 = 爱浪漫的程序媛

混编中遇到的搞笑事件

        今天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

发表评论

电子邮件地址不会被公开。 必填项已用*标注

This site uses Akismet to reduce spam. Learn how your comment data is processed.