http://hi.baidu.com/onejw/item/f34390c997cdc226a1b50ae

http://www.cocoachina.com/ask/questions/show/57217

http://www.cnblogs.com/uyoug321/archive/2010/12/11/1903499.html

Xcode中支持C、C++、Object-C3种语言的混编

Xcode中支持C、C++、Object-C3种语言的混编,那么如果想让编译器混编,只需要将实现类的".m"格式修改成".mm"即可,这样编译器即可编译允许c、c++、oc的代码;

但是混编代码,在编译最容易出现也是最多的错误如下:

view plain

  1. 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"格式进行编译代码,防止后期复杂的各种混编问题;

注意以下两点:

Automatic Reference 模式要关掉

Compile Source As --->  Objective C++

转自:http://www.cocoachina.com/ask/questions/show/57217

你可以写一个oc的类,头文件都用oc的方法声明,在原文件里面直接调用c++的就行。不过原文件后缀名要改为.mm

举个例子:

@interface MyOC : 
NSObject

-(void)ImportRootCertificate;

@end

@implementation MyOC

-(void)ImportRootCertificate{

A *a = new A();

a-> ImportRootCertificate(prame,....);//你的c++调用。

}

@end

//使用

MyOc *oc = [Myoc alloc] init];

[oc ImportRootCertificate];//这样就间接调用你的c++了。

转自:http://www.cnblogs.com/uyoug321/archive/2010/12/11/1903499.html

在XCode中将C或者C++代码混合进Object-C代码

Object-C其实是种在C或者C++代码中嵌入运行级对象调用的语言!

什么是运行级对象调用,就是对象调用不是在语法级的,而是在编译后的运行级的,类似的技术还有微软的COM和开放对象组织的Corba,只不过后两个并不把运行级对象调用的内容加到实现语言里,而是使用单独的IDL语法和文件!

理解了上面这个东西,就能明白,就是让编译器是把源文件当成C还是当成C++来编译!

方法一:直接改扩展名

.m文件就是把源文件当成写有Object-C的C文件来编译

.mm文件就是把源文件当成写有Object-C的C++文件来编译

方法二:通过Xcode改文件属性

选择文件,打开Menu的Filey->Get Info

更改File Type的下拉选择,我相信程序员一眼就能看出里面是什么意思 :)

Xcode中C、C++、Object-C3种语言的混编相关推荐

  1. oc语言和c语言,OC和C语言的混编注意点和好处

    苹果的Objective-C编译器批准用户在统一个源文件里自由地混杂利用C++和Objective-C,混编后的语言叫Objective-C++.有了它,你就能够在Objective-C利用过程中利用 ...

  2. php中数据类型、数组排序、循环语句、混编、操作本地文件流程、常用API、函数、魔术常量

    php中数据类型: php中有7种数据类型,分别是: //1.String字符串,用引号包裹的字符,如:$str = 'hello word';//2.Integer整型,可以是正数或负数,有十进制. ...

  3. c语言汇编混编,c语言与汇编混编写法

    R13 (stack pointer) R14 (Link Register) R15 (program counter) c语言中内嵌汇编的规则: 内嵌汇编器与armasm的区别: 访问全局变量: ...

  4. c语言matlab混编max函数,Matlab与C++混编 – engin.h

    #include #include #include "engine.h" using namespace std; void main() { Engine *ep; //定义M ...

  5. Swift与OC混编过程中的配置

    女主宣言 在使用Swift进行iOS开发的过程中,经常涉及到Swift与OC混编的情况,有时主工程是OC的需要另外编入Swift代码,而有时主工程是Swift的需要另外编入OC代码.这其中涉及到修改一 ...

  6. c语言上11e2是实型常量吗,在C语言中的实型变量分为两种类型.doc

    在C语言中的实型变量分为两种类型.doc 第二章 练习题 一.填空题 1.在C语言中的实型变量分为两种类型,它们是float型和( )型. 2.若有定义:char c='\010';则变量c中包含的字 ...

  7. java 类中有几种访问权限_类中成员的访问权限_Java语言程

    类中成员的访问权限_Java语言程 4.7.2 类中成员的访问权限 Java将类中成员(成员变量和成员方法)的访问权限(可见性)划分为4种情况,按照访问权限的范围大小从小到大列出如下. ·私有(pri ...

  8. 元宇宙中可跨语种交流,Meta 发布新语音模型,支持128种语言无障碍对话

    编译 | 禾木木 出品 | AI科技大本营(ID:rgznai100) 语言交流是人类互动一种自然的方式,随着语音技术的发展,我们可以与设备以及未来的虚拟世界进行互动,由此虚拟体验将于我们的现实世界融 ...

  9. 元宇宙中可跨语种交流!Meta 发布新语音模型,支持128种语言无障碍对话

    编译 | 禾木木 出品 | AI科技大本营(ID:rgznai100) 语言交流是人类互动一种自然的方式,随着语音技术的发展,我们可以与设备以及未来的虚拟世界进行互动,由此虚拟体验将于我们的现实世界融 ...

最新文章

  1. C++ with STL(二)map
  2. 怎么理解linux的平均负载及平均负载高后的排查工具
  3. 整体管理6个过程及相关重点
  4. statistics DATA in CHINA
  5. jquery ajax 文本丢失加号和连接号的问题
  6. 荷兰国旗问题(分三块)
  7. VC调用QT的UIDLL
  8. 你们是不是很缺大数据工程师?
  9. 【学习OpenCV4】几何图形的绘制方法
  10. 充一次电使用一年的手机_手机充一次电用一年?现有技术难实现
  11. 线性系统和非线性系统——《应用非线性动力学》读书笔记
  12. wireshark抓包红色_wireshark抓包常见提示含义解析
  13. ipv6的127位掩码如何表示_详解IP地址、子网掩码、网络号、主机号、网络地址、主机地址...
  14. Win系统 - Win10 进入 BIOS 系统(非启动快捷键)
  15. Circular Billiard Table(计算几何)
  16. TP5简单实现类似京东淘宝多级商品筛选功能。
  17. 独立同分布(I.I.D.)是什么?(转载)
  18. HTML中的图片如何自适应屏幕?这篇文章有图片的自适应用法介绍
  19. 程序员职场规划之转型-安晓辉-专题视频课程
  20. 【ROS入门学习01| ROS命令行工具的使用】

热门文章

  1. eclipse和idea代码通用吗_25个JavaScript代码简写技巧(下篇)
  2. bci测试如何整改_EMC测试不合格,应该这样整改
  3. linux删除系统环境变量,Linux系统添加、修改、删除PATH环境变量
  4. php分页类示例下载,PHP 通用分页类的简单示例
  5. 面试(2)——StringBuffer StringBuilder String /==与equals
  6. python函数定义与参数_Python函数的定义方式与函数参数问题实例分析
  7. vue:无法将“vue”识别为脚本_「前端架构」React和Vue -CTO的选择正确框架的指南...
  8. bitherj java_比太钱包为什么从 Bitcoinj 切换到了 Bitherj ?比太钱包从 Bitcoinj 切换到了 Bitherj原因是什么?...
  9. myeclipse每次保存编译全部_Fuchsia编译运行指南
  10. b区计算机复试国家线,2020研究生考试国家线A区B区有什么区别