【发布时间】:2011-03-30 16:57:50
【问题描述】:
我将我的应用程序设置为使用编译器版本下 Target>Build Settings 中的 LLVM GCC 4.2,它适用于模拟器。
当我将“方案”切换到 iPad 时,它会发出与使用 GCC 时相同的警告,所以我假设它现在正在 GCC 下编译。但是“C/C++ 编译器版本”目标仍然设置为 LLVM GCC 4.2(iOS 默认除外,它是 GCC 4.2,我无法更改)。
为什么它不再使用 LLVM GCC 进行编译,我该如何更改它以使其在 iPad 下运行?
编辑:我遇到的错误与访问超类的实例变量有关。如果您没有将其写为 [self iVarName],则 GCC 会出错,而如果您仅使用 iVarName,则 LLVM GCC 可以正常编译。
【问题讨论】:
-
你清理过这个目标吗?你能举一个你试图通过这种方式避免的错误的例子吗?
-
我相信我已经清理了目标。该错误与引用超类的实例变量有关。将错误添加到我的问题中。
-
您是否偶然运行了 32 位模拟器?我的猜测是您在 iPad 上使用 LLVM/GCC,但请记住 iPad 使用的是现代运行时。听起来您的代码正在做现代运行时不允许的事情。也许使用超类 ivar 来合成属性?
-
我完全像这个问题一样使用它并且也解决了它:stackoverflow.com/questions/3957288/… 如果 iPad 使用的是 LLVM/GCC,那么我相信它不会出现这个错误 - 但不幸的是它确实.我不确定我是否使用的是 32 位模拟器。我必须在星期一回来工作时检查。 iPad 是 32 位还是 64 位?
-
iPad 是 32 位的,但它使用类似于 64 位 Mac 的“现代”运行时。我的建议是发布你得到的实际代码和错误,有人可以解决这个潜在问题。例如,如果您尝试 @synthesize 尝试包装超类 ivar 的子类中的属性,则不能直接在现代运行时中执行此操作。
标签: ipad compiler-construction xcode4 llvm-gcc