大家都知道Xcode中支持C、C++、Object-C3种语言的混编,在上一节Box2d中介绍过cocos2d封装的box2d是c++源码实现的,那么如果想让编译器混编,只需要将实现类的".m"格式修改成".mm"即可,这样编译器即可编译允许c、c++、oc的代码;
但是混编代码,在编译最容易出现也是最多的错误如下:
Command /Developer/Platforms/iPhoneSimulator.platform/Developer/usr/bin/g++-4.2 failed with exit
部分分析总结如下:
1. (全局变量)static方法名重复-因为C语言里没有对象的概念,它的方法只要加入相应的.h文件就可以使用,所以,如果和C++ or Objective-C的静态方法重名了,那么环境无法区分,很明显,这个错误是编译时候的错误,而对于static的变量及方法是在编译的时候便被加入的,所以无法识别.
2. (命名空间)全局变量名重复,理由和上面是一样的,当然,如果是全局变量,建议在Objective-C的.m文件(当然现在被改成.mm了)中声名,不然,声明在.h中单独使用是没有问题的,如果直接引用了C or C++的.h,那么即使这时候全局变量不重复,也会出现上面的问题.
3. (主函数)含有多个main方法,main方法是程序的入口,如果有多个文件含有main方法,那么也会出现上面的问题.
其实对于“failed with exit”的问题,总的来说,这个问题就是因为方法或是全局变量重复所导致的编译环境无法识别并编译 !所以童鞋们使用混编程序的时候要特别注意,最好的解决办法就是,如果你的项目后期有1/100000 的几率会使用混编进行(例如加入box2d开发包),那么就应该从项目一开始就将实现类修改成".mm"格式进行编译代码,防止后期复杂的各种混编问题;
OK,这篇小结就到这里;
分享到:
相关推荐
本文浅析了ARM汇编 C语言 C++ 相互调用的方法。
C语言与汇编语言混合编程浅析,阐述了C程序调用汇编子程序中参数传递和寄存器的使用规则,分析了二者连接过程中的问题,并给出了应用示 俐。
linux新手GDB入门,以c/c++为例,讲解GDB常用的操作。。。。。。
Visual C++中的异常处理浅析 Visual C++中的异常处理浅析
首先提问,阅读以下C语言程序段,并写出结果: 代码: printf("8 %% -3 = %d\r\n", 8 % -3); printf("-8 %% -3 = %d\r\n", -8 % -3); printf("-8 %% 3 = %d\r\n", -8 % 3); 如果你的回答是: a % b = 2 a % b = -2 ...
文中从主函数、类与结构、模板与宏三方面阐述了C/C++之间的联系,从编程思想、关键字和语法格式三方面论述了二者的区别,最后给出培养学生编程思路这一教学原则。
Broland C++ Builder 中的 Gdiplus(GDI+)浅析.
浅析c.c++中的指针.doc..............
但在使用中支架频繁出现故障,并发生损坏。经现场观察,发现故障主要是由漏液造成的,而导致漏液的原因则是尾梁千斤顶活塞杆伸出时易被煤块破坏表面,伸回时就会破坏密封圈。为解决该问题,对尾梁进行了改造并增加了厚...
任何一个操作系统都会提供大量的API供程序员使用,μC/OS-Ⅱ也不例外。由于μC/OS-Ⅱ面向的是嵌入式开发,并不要求大而全,所以内核提供的API也就大多和多任务息息相关。本文通过分析μC/OS-Ⅱ中提供的API来引出μC/...
下面小编就为大家带来一篇浅析C/C++中动态链接库的创建和调用。小编觉得挺不错的,现在分享给大家,也给大家做个参考,一起跟随小编过来看看吧
对于即将来临的3G时代,GSM网络...在GSM网络向WCDMA网络演进过程中,运营商会面临很长一段2G/3G网络混合共存时期,本文从3G网元的设置、2G网元的升级以及2G/3G网络互通等多个方面,浅析了GSM/WCDMA混合组网的相关策略。
浅析多媒体技术在C语言教学中的利弊.pdf
C语言 C++ 异同 浅析C语言与C_的异同
C++语言extern C浅析
传统的基于C/S结构和单个项目进行开发的项目管理系统已经不能迅速地响应企业的业务需要,远远落后于当前经济的发展。 B/S架构的项目管理软件不需要暗转任何的软件,只要一台电脑,一条网线就可以实现。无论是内部...
动态存储管理是计算机中作业在执行前不直接建立分区,而是在作业执行过程中建立的。所建分区的大小可随作业或进程对内存的...本文将以C/C++语言为对象,对其在运行、实现、动态调整策略等方面和内容做以简单的介绍。
浅析计算机原理中C语言的应用.pdf
C/C++变量在内存中的分布在笔试时经常考到,虽然简单,但也容易忘记,因此在这作个总结,以加深印象。先写一个测试程序: 代码如下:#include #include int g_i = 100; int g_j = 200; int g_k, g_h; int main...
浅析linux 下的/etc/profile、/etc/bashrc、~/.bash_profile、~/.bashrc