iOS 如何配置新建Xocde工程,识别C++语言混编

本文介绍如何在Xcode项目中解决C++与Objective-C的兼容性问题,特别是涉及第三方库时的编译错误。文章提供了一种有效的方法,即通过调整文件后缀和编译设置来确保项目的顺利编译。

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

我是刚上路的菜鸟,希望大家多多指教,写本文其实是为了增加自己对自己犯过的错误去更深刻的记忆,同时也让和我一样刚开始编程生涯的童鸟们少走一些弯路。。。。。。

在我们新建的工程里面Compile Sources As默认的是According to File Type  所以不能识别C++,错误如下:


不识别C++的东西,所以我们要修改一下Xcode的配置文件



这样基本识别问题就好了。


后续:iOS SDK开发问题

这么做后,.a静态库文件都能编译通过,但是问题来了,如果项目中引用到了其它的第三方库文件,可能会产生错误,如下图所示:



就是很莫名其妙的就出现了问题,经过调试发现,原来是Compile Sources As 设置为 Object-C++所导致的,也就是说编译器开始识别C++了,而ObjectiveC部分参数识别不了,所以就各种错误了。

相信有的朋友在使用百度地图api的时候,添加lib库也会遇到类似的问题:

那么到底该如何解决呢?如果切换回According To File Type,那么lib库(SDK库)就会报错,切换成C++,部分第三方库就会出差,该怎样混编兼容呢?接下来我给出一种方案,具体如下:


1,Compile Sources As 切换回According to File Type,这样能保证其它的第三方库、以及之后可能添加的不同类型源码文件都没有问题,我们以文件类型来动态编译(也就是说是oc文件,就用oc编译,是C++文件,就以C++编译)

2,在新项目中,把AppDelegate或是引用到lib库的那个文件或是任意一个文件后缀修改成.mm,这样,系统编译时就可以识别到C++了,我们自己的lib库也不会出错了~

PS:如果AppDelegate中有其它调用,修改成.mm后缀会引起错误,那么就修改其它的文件


3,此时在运行项目,是不是都没问题了?第三方库也不会报错了(跟Compile Sources As有关),我们自己的lib库、SDK也不会报错了~


注意事项
1.静态库中如果有采用
ObjectC++实现,那么需要您保证您工程中至少有一个.mm后缀的源文件(您可以将任意一 个.m后缀的文件改名为.mm),或者在工程属性中指定编译方式,即将XCodeProject -> Edit Active Target -> Build Setting-> GCC4.2 - Language -> Compile Sources As设置为"Objective-C++"


2.如果您只在Xib文件中使用了目标lib库(比如BMKMapView),没有在代码中使用它(BMKMapView),编译器在链接时不会链接对应符合,需要在工程属性中显式设定:在XCode的Project -> Edit Active Target -> Build -> Linking -> Other Linker Flags中添加:-ObjC


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值