【发布时间】:2013-01-31 09:36:31
【问题描述】:
参考问题:Problem when #import C++ Header File in iPhone/iPad Project
嗯,我的项目比较大,无法解决这个问题,要么将 ALL 或 PART OF 我的项目文件 .m 更改为 .mm,要么更改 ALL 或 PART OF File Inspector 中的文件类型。
那是因为我的同事和库作者都不严格遵循 C++ 标准,例如将 void* 分配给 int* 以及其他各种违规行为。 Objective C 将允许这些并且只是给出警告。
我要#import 的C++ 头文件是一个库。它在其标头中使用关键字 namespace,而其实现位于 .a 程序集文件中。这意味着几乎不可能破解它们。除此之外,我的项目还包括其他仅与 Objective C 兼容的库。
有人知道怎么解决吗?
我能想到的方式如下:
为 namespace 寻找替代方案,但我仍然想写 在我的项目中使用
QCAR::Renderer之类的代码。告诉编译器识别 C++ 头文件(嗯,那可能不是 可能)
编辑
#ifdef __cplusplus
# include MyCPPHeader.h
#endif
如果我使用它,MyCPPHeader.h 真的会被包含在 Objective-C 环境中吗?我猜不会。这违反了不入侵图书馆的原则。
编辑
即使我更改了这些 .mm 文件以包含该 C++ 标头,我也会收到一个链接错误,提示 Undefined symbols for architecture armv7:。当我的 .mm 文件包括其他 库中的.h 标头时会发生这种情况。
【问题讨论】:
-
将源文件命名为
.mm应该可以正常工作(我正在开发的 Mac 应用程序使用大型 C++ 库,并且我的大多数应用程序实现文件使用.mm文件扩展名)。也许您错误地将 C++ 标头包含在.m文件中(直接或间接)? -
您的问题是如何表现出来的?作为编译器错误,如果是,哪个?作为链接器错误,如果是,哪个?作为运行时错误,如果是,是哪个?
-
因为我不是那些
.m文件的作者。如果我把.m后缀改成.mm,我会修改他们的代码。 -
你写的是c++库还是包含c++库的项目?您必须能够更改至少一个部分才能获得帮助。
-
@ComboZhc 就像你的问题毕竟不是 c++ 一样。看起来 lib 没有用 armv7 编译。
标签: c++ iphone objective-c xcode objective-c++