如何在objective-c++中编译特定文件以及在objective-c中编译项目的其余部分

如何在objective-c++中编译特定文件以及在objective-c中编译项目的其余部分,objective-c,xcode,compilation,objective-c++,conditional-compilation,Objective C,Xcode,Compilation,Objective C++,Conditional Compilation,我目前正忙于一个项目,我需要使用一个外部附件来阅读 提供了一个SDK,用Objut+C++编写,然后按照设置XCODE的指令编译源:ObjuleC++和其他Obj-C++中的其他链接标志。 SDK编译得很好,但问题是我已经在项目中使用了几个库,比如ASIHTTPRequest、JSONKit等等。。。由于这些库中的新设置,我遇到了编译问题。如果我切换回以前的设置,我会在reader的SDK中遇到编译问题 问题是:有没有一种方法可以将SDK类作为C++来编译,而项目的其余部分则作为Objtovi-

我目前正忙于一个项目,我需要使用一个外部附件来阅读

<附件>提供了一个SDK,用Objut+C++编写,然后按照设置XCODE的指令编译源:ObjuleC++和其他Obj-C++中的其他链接标志。 SDK编译得很好,但问题是我已经在项目中使用了几个库,比如ASIHTTPRequest、JSONKit等等。。。由于这些库中的新设置,我遇到了编译问题。如果我切换回以前的设置,我会在reader的SDK中遇到编译问题

问题是:有没有一种方法可以将SDK类作为C++来编译,而项目的其余部分则作为Objtovi-C? 编辑:SDK文件仅由.h和链接库组成

谢谢你的帮助,
Mike

尝试将包含库头的文件重命名为myClass.h(接口)和myClass.mm(实现文件)。这迫使文件被编译为Objto-C++。

< P>从文件导航器中选择要编译为ObjeC++的文件,然后在文件检查器视图中选择文件类型。这是在Xcode 4中,但在Xcode 3中也有类似的机制


我已经解决了这个问题:

您应该根据文件类型将Complile Sources设置为, 将-ObjC++设置为其他链接器标志 最后,您应该将该引用的文件后缀修改为.mm 图书馆方法 在BuildPhases选项卡中,有一部分是编译源代码。对于要使用Objective-C++编译器的文件,添加标志:-xobjective-C++


在Xcode 12.5中测试

谢谢你的回答,但我只有可访问的标题和链接库。还有什么我能做的吗?你要包含标题的类的文件是这样命名的:myClass.h myClass.mm吗?我还没有导入任何东西,只是通过更改编译器标志和“编译源代码为”选项将编译器标志更改回来,如果您没有在任何地方包含库头,它应该可以正常编译。然后试着按照我的指示去做。谢谢你的帮助,我找到了另一个解决方案,它似乎可以在问题的瞬间编译共享你真的有编译错误或链接器错误吗?提供实际错误有助于生成更好的答案这些是编译错误,主要是转换可达性。m:200:error:invalid conversion from'BOOL'to'NetworkStatus'-ASIHTTPRequest/ASIHTTPRequest.m:443:0 ASIHTTPRequest/ASIHTTPRequest.m:443:error:invalid const void*'to'const uint8_t*'转换无效…谢谢你的回答,如果我发现的解决方案有问题,我会试试这个。在此刻分享问题谢谢!在我的情况下,无法更改文件扩展名,因为代码是共享的windows/mac ifdef代码。在Xcode中为源文件设置-ObjC++标志对我来说也不起作用,但这个解决方案确实起了作用。我认为公认的答案比这个解决方案好得多。使用.mm扩展名还可以与使用Objective-C++的文件的任何开发人员进行通信,如果这些文件曾在其他目标或项目中使用过,他们将自动使用正确的语言。具体取决于。如果同一个cpp文件也在另一个平台上使用,并且内部的via定义会根据平台的不同而被阻止,则您别无选择。您必须使用此标志,因为.mm在Linux或Windows上不会被很好地接受。