脆弱的abi不支持-fobjc-arc

时间:2012-07-05 07:32:29

标签: c++ xcode dylib

我有这行代码:

GetVolParmsInfoBuffer volumeParms;
HParamBlockRec pb;

我收录了这个标题:

#include </System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/Files.h>

但是编译器仍会抛出HParamBlockRec未知类型的错误。

在具有相同文件的其他项目中,一切正常,即使不包含Files.h标题 有什么我想念的吗?

更新 我能够通过将架构设置为32位来修复错误。

但现在我收到了这个构建错误:

error: -fobjc-arc is not supported with fragile abi

我搜索了一下,转而使用LLVM GGC 4.2编译器会有所帮助,但事实并非如此。

现在我的构建设置是:

  • 32位英特尔
  • Mac OSX 10.7 SDK
  • 仅构建活动架构
  • Mach-O Type设置为动态库

我对XCode中的编码非常不熟悉。如果你能帮助我,那就太好了。

2 个答案:

答案 0 :(得分:4)

不幸的是,ARC在32位OS X上根本不可用。显然Apple已经决定所有新的开发应该已经转移到x86-64,所以所有新的Objective-C 2.0都是新功能 - 而不仅仅是ARC,以及-fobjc-nonfragile-abicontainer literals,对象下标,default synthesis of properties ... - 仅针对64位OS X(当然还适用于32位iOS)实现。

因此,如果您正在尝试为32位和64位版本的OS X生成包含代码的胖二进制文件,则必须限制自己使用Objective-C 1.0功能和/或修改代码库用#ifdefs。这不公平,但确实如此。遗憾。

答案 1 :(得分:2)

您不应该在框架中包含单个标头。请改用伞头:

#include <Carbon/Carbon.h>

此外,每the documentation HParamBlockRec在64位中不可用。您将需要找到您正在使用的基于参数块的函数的现代替代品。

对于-fobjc-arc警告,请确保将 Objective-C自动引用计数$CLANG_ENABLE_OBJC_ARC)构建设置设置为NO)。