如何配置xCode 4来编译objective-c ++而不添加'.mm'文件

时间:2011-07-09 00:01:11

标签: objective-c xcode4 objective-c++

我试图为你清楚地描述我的问题,所以它可能有点长,我真的很感激,如果你能阅读它并提供一些建议。谢谢。

我有一个库项目,我们称之为MyCppLib,其中包含一些遗留的c ++代码,我在这个项目中添加了一个适配器类,以便我可以在其他项目中使用objective-c ++。以下是MyCppLib项目的概述。

项目 MyCppLib
- 一些遗留的c ++代码
- Adapter.h
- Adapter.mm

我有另一个项目,我们称之为Main项目,它使用MyCppLib项目作为静态库。因此,我使用xCode 4编译MyCppLib,并在xCode 4中获取libMyCppLib.a和config Main项目,以将其与Main项目链接。以下是Main项目的概述。

项目主要
- 一些Objective-c类 ,不包含'.mm'文件
- Adapter.h
- libMyCppLib.a 作为静态库

当我在xCode 4中编译Main项目时,我遇到了一些错误:

  

架构armv6的未定义符号:
   “operator new(unsigned long)”,引自:         - libMyCppLib.a中的[Adapter init](Adapter.o)
        :: CPP :: 命名空间 :: MyCppClass :: MyCppClass ()在libMyCppLib.a( MyCppClass .o)

     

... 其他一些类似的错误

     

ld:找不到架构armv6的符号
  collect2:ld返回1退出状态

我认为可能因为Main项目没有objective-c ++功能,所以我在Main项目中添加了一个'.mm'文件。现在Main项目应该是这样的:

项目主要
- 一些Objective-c类 ,不包含'.mm'文件
- Adapter.h
- libMyCppLib.a 作为静态库
- DummyObjCpp.h
- DummyObjCpp.mm

然后,我编译Main项目,成功

所以,最后,我的问题是:如何在不添加'.mm'文件的情况下将Main项目配置为具有objective-c ++功能?

1 个答案:

答案 0 :(得分:6)

好的,我已经读了几遍这个问题,但我仍然不确定我是否理解这个问题。

虽然我已经使用Objective-C,C ++和Objective-C ++做了很多,但我没有遇到过你用静态库描述的场景(因为我的大多数开发都是针对OS X而不是iOS,允许动态库和首选的地方。)

听起来你的第二个项目可能存在问题,因为.h文件本身并没有充分说明.a中包含的内容(即当你将它与你的可执行文件的其余部分组合时,你'我需要与libstdc++.dylib联系起来。您可以尝试将Adapter.h标题文件的“文件类型”从默认的C header更改为C++ header,如下图所示:

enter image description here