Command /Developer/Platforms/iPhoneSimulator.platform/Developer/usr/bin/g++-4.2 failed with exit

本文探讨了在Xcode环境下使用C、C++及Objective-C进行混合编程时遇到的常见问题及其解决方案,并提供了减少静态库函数名冲突的建议。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

 

用C,C++,Objective-C三种C语言3C混编的开发程序,在当然方法也和大家说一下吧,就是在Xcode环境中把C语言的.c文件,C++的.cpp文件与Objective-C的.m文件的文件名全部修改成.mm,这样就可以启用Objective-C++的编译环境3C混编了,可是遇到了上述问题,网上的说法不一致,而且我也遇到了多次这个问题,最后解决的方式也不一样,所以最后把所有可能的情况总结了一下:

  1)static方法名重复-因为C语言里没有对象的概念,它的方法只要加入相应的.h文件就可以使用,所以,如果和C++ or Objective-C的静态方法重名了,那么环境无法区分,很明显,这个错误是编译时候的错误,而对于static的变量及方法是在编译的时候便被加入的,所以无法识别.

  2)全局变量名重复,理由和上面是一样的,当然,如果是全局变量,建议在Objective-C的.m文件(当然现在被改成.mm了)中声名,不然,声明在.h中单独使用是没有问题的,如果直接引用了C or C++的.h,那么即使这时候全局变量不重复,也会出现上面的问题.

  3)含有多个main方法,main方法是程序的入口,如果有多个文件含有main方法,那么也会出现上面的问题.

    总的来说,这个问题是因为方法或是全局变量重复所导致的编译环境无法识别并编译 

以上转自一位大牛:http://blog.sina.com.cn/s/blog_67e8ece00100me2u.html

以下是我个人对用于ios下linux c静态库几点建议:

    通常我们都会把函数的声明和全局变量定义在.h文件中,以方便引用,但在ios静态库中,我个人觉得在ios中引用的c静态库头文件中最少量的声明库内部的函数(可将函数写在.c文件中或者单独做一份.h文件,将除了接口以外的函数放在一起),这样就尽可能少的产生函数名冲突,全局变量冲突的问题.

经验之谈,血的教训,以上问题搞了两天没编译过去,悲催!

 

在附加一个 关于"undefine symbols for architecture i386"问题的解决方法

http://blog.youkuaiyun.com/steve1018/article/details/6902973

 

最主要可能的原因是你把库编译的架构整错了,注意armv6,armv7,i368的区别,以及静态库的目的,适用于真机还是用于模拟器,因为他们声称的文件是不一样内容的(分别存放在不同的生成路径,要注意哦!)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值