gpt4 book ai didi

objective-c - 如何配置 xCode 4 以在不添加 '.mm' 文件的情况下编译 objective-c++

转载 作者:搜寻专家 更新时间:2023-10-30 20:01:13 29 4
gpt4 key购买 nike

我正在努力为您清楚地描述我的问题,所以它可能有点长,如果您能阅读并提供一些建议,我将不胜感激。谢谢。

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

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

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

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

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

Undefined symbols for architecture armv6:
"operator new(unsigned long)", referenced from:
-[Adapter init] in libMyCppLib.a(Adapter.o)
my::cpp::namespace::MyCppClass::MyCppClass()in libMyCppLib.a(MyCppClass.o)

... some other similar errors

ld: symbol(s) not found for architecture armv6
collect2: ld returned 1 exit status

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

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

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

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

最佳答案

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

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

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

enter image description here

关于objective-c - 如何配置 xCode 4 以在不添加 '.mm' 文件的情况下编译 objective-c++,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6631772/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com