【问题标题】:How to config xCode 4 to compile objective-c++ without adding a '.mm' file如何在不添加“.mm”文件的情况下配置 xCode 4 来编译 Objective-C++
【发布时间】:2011-07-09 00:01:10
【问题描述】:

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

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

项目 MyCppLib
- 一些遗留的 C++ 代码
- 适配器.h
- 适配器.mm

我有另一个项目,我们称之为Main 项目,它使用MyCppLib 项目作为静态库。所以我使用xCode 4编译MyCppLib,得到libMyCppLib.a,并在xCode 4中配置Main项目,将其与Main项目链接。这是Main 项目的概述。

项目主要
- 一些objective-c类 不包含'.mm'文件
- 适配器.h
- libMyCppLib.a 作为静态库

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

架构 armv6 的未定义符号:
“operator new(unsigned long)”,引用自:
- [适配器初始化] 在 libMyCppLib.a(Adapter.o)
my::cpp::命名空间:: MyCppClass::MyCppClass()in libMyCppLib.a(MyCppClass.o)

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

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

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

项目主要
- 一些objective-c类 不包含'.mm'文件
- 适配器.h
- libMyCppLib.a 作为静态库
- DummyObjCpp.h
- DummyObjCpp.mm

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

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

【问题讨论】:

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


    【解决方案1】:

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

    虽然我在 Objective-C、C++ 和 Objective-C++ 方面做了很多工作,但我还没有遇到过您描述的使用静态库的场景(因为我的大部分开发都是针对 OS X 而不是 iOS,允许和首选动态库)。

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

    【讨论】:

    • 或者将 libstdc++.dylib 添加到链接库列表中。
    • @NSGod 对不起,我的英语很差。我尝试了您更改文件类型的建议,但仍然无效。但是您的答案中也提到了@Bavarious 的解决方案!谢谢
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2011-06-16
    • 1970-01-01
    • 1970-01-01
    • 2020-05-04
    • 1970-01-01
    • 1970-01-01
    • 2016-10-07
    相关资源
    最近更新 更多