【问题标题】:Objective-C++ compiles for iPhone, but not simulatorObjective-C++ 为 iPhone 编译,但不是模拟器
【发布时间】:2010-04-09 10:39:55
【问题描述】:

我有一个 C++ 库要添加到我的 iphone 项目中。

我在一个头文件中声明

@interface a
{
   cppvirtualclass V;
}

对于具有 Release 设置的 iPhone 设备,这编译得很好。然而,无论有没有调试信息,它都拒绝为模拟器编译。

它给出了错误

error: type 'V' has virtual member functions.

有没有办法解决这个问题,还是我必须只定义具体的 C++ 类?

【问题讨论】:

  • 我不认为这是有效的语法。你的意思是@interface

标签: c++ iphone objective-c ios-simulator objective-c++


【解决方案1】:

默认情况下,Objective C 在创建 Objective C 对象时不会在 C++ 实例变量上运行构造函数。这意味着(我认为)C++ 对象的 vtable 将无法正确初始化。

尝试将您的实例变量设为指针并在 init 方法中分配它(并在 dealloc/finalize 中销毁它)。

或者

尝试在目标代码生成设置中设置“Call C++ default Ctors/Dtors in Ovjective-C”。

(GCC_OBJC_CALL_CXX_CDTORS, -fobjc-call-cxx-cdtors)

【讨论】:

  • 我目前采用了指针路由,但这无法解释为什么设备代码(至少)可以编译。
  • 我不知道为什么会这样。对于不同的架构,您的目标设置是否以某种方式有所不同?我会得到两个版本的 g++ 调用文本,看看命令行开关有何不同。
【解决方案2】:

此外,Objective-C++ 不再是 iPhone 开发允许的语言(根据 4.0)。您可以使用 Objective-C、C 和 C++,但不能使用 Objective-C++。

【讨论】:

  • 这是对该声明的有趣解释。
  • 真的吗?!他们打算如何区分 Objective-C++ 程序和(Objective-C,C++)程序?
  • 允许的语言列表是 Objective-C、C 和 C++(加上 webapps 的 javacript)。 Objective-C++ 不在该列表中。至于区分,我确信 nm 输出中有足够的符号。例如。 .cxx_construct 似乎只出现在 ObjC++ 二进制文件中。他们是否会执行它,或者这只是一个法律混乱......谁知道呢。
猜你喜欢
  • 2010-11-29
  • 1970-01-01
  • 2010-12-10
  • 1970-01-01
  • 1970-01-01
  • 2012-06-11
  • 1970-01-01
  • 2015-09-25
  • 1970-01-01
相关资源
最近更新 更多