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();
}
|
|
|
|
|
分享到:
相关推荐
总之,OC和Swift的混合编程是iOS开发中的一种常见情况,理解和掌握混编技术对于提升开发效率和项目质量至关重要。通过学习和实践,开发者可以熟练地在这两种语言之间切换,构建出更加高效和优雅的应用。
问题已解决.c#与matlab混编过程中遇到的部分问题,有待大家共同探讨
"Matlab C混编"是一种将C或C++代码与MATLAB环境相结合的技术,它允许开发者利用MATLAB的强大数学计算能力,同时利用C/C++的高效性和灵活性。这种技术主要通过MATLAB的MEX(MATLAB EXtension)文件来实现,这是一种可...
在描述中,我们了解到文档将讨论关于Swift项目如何混编Objective-C代码,以及如何在Framework Target中实现混编,并且会指出在混编过程中可能会遇到的一些问题以及注意事项。 从标签中我们也可以看出,本文主题与...
在Matlab与VC++混编的过程中,主要涉及的是利用Matlab的强大数值计算能力,并通过DLL(动态链接库)的形式在VC++程序中调用Matlab编译的函数。以下是混编设置的详细步骤: 首先,确保你已经安装了Matlab 7.1和VC++...
标题“lingo与高级语言的混编”以及描述“lingo软件虽然可以解决很多常见的模型问题,但是遇到一些较复杂的问题,与高级语言的混编更有效率”指出了lingo软件在解决模型问题上的局限性以及将lingo与其他高级编程语言...
文章中提到的混合编程实践案例包括张燕等人利用M函数文件编译成C共享库的方法实现了C#与MATLAB的混编,Bistak利用C#与MATLAB/Simulink进行混合编程以开发远程控制实验室系统,并许茂增等人运用C#结合其他技术实现...
- 如果在混编过程中遇到问题,查阅Halcon的官方文档和开发者论坛通常能找到解决方案。 通过这样的混编,开发者可以在VC++ 6.0的强大编程环境下利用Halcon的丰富视觉功能,实现定制化的机器视觉应用,满足各种复杂的...
混编技术则是指在程序开发过程中,将多种不同编程语言进行混合编程的技术手段,以充分利用各种语言的优势。 #### 二、RESOLVE_ALL 在 IDL 中的应用 RESOLVE_ALL 是 IDL 中的一个命令,用于解析环境变量并确定文件...
项目的文档应该包含了马拉特算法的理论介绍、VC和MATLAB混编的具体步骤、代码的详细解释以及可能遇到的问题和解决方案。这对于初学者来说是非常宝贵的资源,他们可以通过这个项目学习如何将理论知识应用于实际编程,...
7. **错误处理**:在混编过程中,需要捕获并处理可能出现的错误,如内存分配失败、引擎初始化失败、Matlab代码执行错误等。Matlab引擎提供了错误处理接口,可以通过检查返回值或异常来处理这些错误。 8. **性能优化...
在混编技术方面,C/C++混编通常指的是在C++程序中调用C语言编写的库。由于C语言库可能不支持C++的某些特性,如类和对象,因此需要使用extern "C"来告诉C++编译器以C语言的方式来处理这些函数。例如: ```cpp extern...
在C#中混编Halcon,主要是通过Halcon的.NET接口来实现的。Halcon提供了.NET版本的DLL库,可以被C#项目引用,这样就可以在C#程序中调用Halcon的函数和方法。首先,我们需要在项目中引入Halcon的.NET组件,通常这个...
前面几个例子是熟悉vtk的,练习时用控制台程序编写,vtk与MFC混编的过程中遇到了很多问题,为了方便大家,我把这一过程中的遇到的错误和解决办法都记录下来了,希望能够对大家有所帮助 VTK入门程序样例分析 1、圆锥...
首先,C#与MATLAB混编主要通过MATLAB Compiler SDK进行,它允许开发者将MATLAB代码编译成.NET组件,然后在C#项目中调用。这样,开发者可以利用MATLAB强大的算法库,同时保持C#的开发效率和平台兼容性。 1. **MATLAB...
CSharp使用DLL进行调用MatLab混编概要 本文档主要介绍了如何使用CSharp调用MatLab进行混编,实现了CSharp与MatLab的交互。下面是相关的知识点: 一、生成DLL库 在生成DLL库之前,需要准备好函数sumab.m,该函数...
本篇文章将详细介绍如何在Xcode中进行C++和Objective-C的混编,以便在Objective-C项目中使用C++的STL。 首先,我们需要理解C++和Objective-C之间的主要差异。Objective-C是C的超集,增加了面向对象特性,如类别...
4. C语言与汇编语言混编:在微机控制系统中,C语言提供了一种高级抽象,易于编写和理解,而汇编语言则能更直接地控制硬件资源。在本项目中,可能使用C语言编写上层逻辑,利用汇编语言编写低级的中断服务程序或优化...