Ton*_*ony 3 objective-c objective-c++ xcode4
我试图清楚地为你描述我的问题,所以它可能有点长,我真的很感激,如果你能阅读它并提供一些建议.谢谢.
我有一个库项目,让我们调用它MyCppLib,其中包含一些遗留的c ++代码,我在这个项目中添加了一个适配器类,这样我就可以在其他项目中使用objective-c ++.这是MyCppLib项目概述.
Project MyCppLib
- 一些遗留的c ++代码
- Adapter.h
- Adapter.mm
我有另一个项目,我们称之为Main项目,它将MyCppLib项目用作静态库.所以我使用xCode 4来编译MyCppLib,并在xCode 4中获取libMyCppLib.a和配置Main项目以将其与Main项目链接.这是Main项目概述.
Project Main
- 一些 不包含'.mm'文件的objective-c类
- Adapter.h
- libMyCppLib.a 作为静态库
当我Main在xCode 4中编译项目时,我遇到了一些错误:
架构armv6的未定义符号:
"operator new(unsigned long)",引自:
- libMyCppLib中的libMyCppLib.a(Adapter.o)
my :: cpp :: namespace :: MyCppClass :: MyCppClass()中的[Adapter init] . a(MyCppClass .o)...... 一些其他类似的错误
ld:找不到架构armv6的
符号:collect2:ld返回1退出状态
我认为这可能是因为Main项目没有objective-c ++功能,所以我在Main项目中添加了一个'.mm'文件.现在Main项目应该是这样的:
Project Main
- 一些 不包含'.mm'文件的objective-c类
- Adapter.h
- 作为静态库的
libMyCppLib.a
- DummyObjCpp.h - DummyObjCpp.mm
然后,我编译Main项目,它成功了!
所以,最后,我的问题是:如何在Main不添加'.mm'文件的情况下将项目配置为具有objective-c ++功能?
好的,我已经读了几遍这个问题,但我仍然不确定我是否理解这个问题.
虽然我已经用Objective-C,C++和Objective-C++做了很多工作,但我没有遇到过你用静态库描述的场景(因为我的大多数开发都是针对OS X而不是iOS,其中动态库允许和优先).
听起来你的第二个项目可能存在问题,因为.h文件本身并不能说明.a中包含的内容(即当你将它与其他可执行文件结合使用时,你需要被联系起来libstdc++.dylib).您可以尝试更改Adapter.h头文件的"文件类型",默认值为C header,C++ header如下图所示:
