`

混编中遇到的搞笑事件

 
阅读更多

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
分享到:
评论

相关推荐

    oc和swift混编

    总之,OC和Swift的混合编程是iOS开发中的一种常见情况,理解和掌握混编技术对于提升开发效率和项目质量至关重要。通过学习和实践,开发者可以熟练地在这两种语言之间切换,构建出更加高效和优雅的应用。

    c#与matlab混编

    问题已解决.c#与matlab混编过程中遇到的部分问题,有待大家共同探讨

    matlab C混编

    "Matlab C混编"是一种将C或C++代码与MATLAB环境相结合的技术,它允许开发者利用MATLAB的强大数学计算能力,同时利用C/C++的高效性和灵活性。这种技术主要通过MATLAB的MEX(MATLAB EXtension)文件来实现,这是一种可...

    OC和Swift混编.pdf

    在描述中,我们了解到文档将讨论关于Swift项目如何混编Objective-C代码,以及如何在Framework Target中实现混编,并且会指出在混编过程中可能会遇到的一些问题以及注意事项。 从标签中我们也可以看出,本文主题与...

    Matlab与VC++混编的设置

    在Matlab与VC++混编的过程中,主要涉及的是利用Matlab的强大数值计算能力,并通过DLL(动态链接库)的形式在VC++程序中调用Matlab编译的函数。以下是混编设置的详细步骤: 首先,确保你已经安装了Matlab 7.1和VC++...

    lingo与高级语言的混编

    标题“lingo与高级语言的混编”以及描述“lingo软件虽然可以解决很多常见的模型问题,但是遇到一些较复杂的问题,与高级语言的混编更有效率”指出了lingo软件在解决模型问题上的局限性以及将lingo与其他高级编程语言...

    C#与MATLAB混编方法在图像处理中的应用研究.pdf

    文章中提到的混合编程实践案例包括张燕等人利用M函数文件编译成C共享库的方法实现了C#与MATLAB的混编,Bistak利用C#与MATLAB/Simulink进行混合编程以开发远程控制实验室系统,并许茂增等人运用C#结合其他技术实现...

    VC++ 6.0 与 Halcon 混编实例

    - 如果在混编过程中遇到问题,查阅Halcon的官方文档和开发者论坛通常能找到解决方案。 通过这样的混编,开发者可以在VC++ 6.0的强大编程环境下利用Halcon的丰富视觉功能,实现定制化的机器视觉应用,满足各种复杂的...

    IDL开发大赛-混编

    混编技术则是指在程序开发过程中,将多种不同编程语言进行混合编程的技术手段,以充分利用各种语言的优势。 #### 二、RESOLVE_ALL 在 IDL 中的应用 RESOLVE_ALL 是 IDL 中的一个命令,用于解析环境变量并确定文件...

    小波分解马拉特算法VC与matlab混编实现

    项目的文档应该包含了马拉特算法的理论介绍、VC和MATLAB混编的具体步骤、代码的详细解释以及可能遇到的问题和解决方案。这对于初学者来说是非常宝贵的资源,他们可以通过这个项目学习如何将理论知识应用于实际编程,...

    VC与Matlab混编问题 相关资料

    7. **错误处理**:在混编过程中,需要捕获并处理可能出现的错误,如内存分配失败、引擎初始化失败、Matlab代码执行错误等。Matlab引擎提供了错误处理接口,可以通过检查返回值或异常来处理这些错误。 8. **性能优化...

    ip网络地址查询(c/c++)混编示例

    在混编技术方面,C/C++混编通常指的是在C++程序中调用C语言编写的库。由于C语言库可能不支持C++的某些特性,如类和对象,因此需要使用extern "C"来告诉C++编译器以C语言的方式来处理这些函数。例如: ```cpp extern...

    Halcon和c#的混编

    在C#中混编Halcon,主要是通过Halcon的.NET接口来实现的。Halcon提供了.NET版本的DLL库,可以被C#项目引用,这样就可以在C#程序中调用Halcon的函数和方法。首先,我们需要在项目中引入Halcon的.NET组件,通常这个...

    C#与MATLAB混编方法在图像处理中的应用研究.zip

    首先,C#与MATLAB混编主要通过MATLAB Compiler SDK进行,它允许开发者将MATLAB代码编译成.NET组件,然后在C#项目中调用。这样,开发者可以利用MATLAB强大的算法库,同时保持C#的开发效率和平台兼容性。 1. **MATLAB...

    CSharp使用DLL进行调用MatLab混编[归纳].pdf

    CSharp使用DLL进行调用MatLab混编概要 本文档主要介绍了如何使用CSharp调用MatLab进行混编,实现了CSharp与MatLab的交互。下面是相关的知识点: 一、生成DLL库 在生成DLL库之前,需要准备好函数sumab.m,该函数...

    C++和Objective-C混编 如何在xcode中用C++的STL

    本篇文章将详细介绍如何在Xcode中进行C++和Objective-C的混编,以便在Objective-C项目中使用C++的STL。 首先,我们需要理解C++和Objective-C之间的主要差异。Objective-C是C的超集,增加了面向对象特性,如类别...

    微机原理频率计设计-Proteus仿真&C语言汇编混编.zip

    4. C语言与汇编语言混编:在微机控制系统中,C语言提供了一种高级抽象,易于编写和理解,而汇编语言则能更直接地控制硬件资源。在本项目中,可能使用C语言编写上层逻辑,利用汇编语言编写低级的中断服务程序或优化...

    Keil软件“C语言”与“汇编”混编——相关知识整理借鉴.pdf

    总结来说,Keil软件的C语言与汇编混编能力为开发者提供了强大的工具,能够在需要高性能和低级硬件控制的同时保持代码的可读性和可维护性。熟练掌握这种混合编程技术,对于微控制器开发人员来说是必要的技能之一。

Global site tag (gtag.js) - Google Analytics