【问题标题】:GData static library: exclude files from ARC with -fno-objc-arc?GData 静态库:使用 -fno-objc-arc 从 ARC 中排除文件?
【发布时间】:2012-01-08 03:49:21
【问题描述】:

我在使用 ARC 的应用中使用 GData 静态库。 Google 的说明说要将库中的头文件链接到项目目标。

问题是,当我这样做时,由于 GData 库与 ARC 不兼容,会出现编译器错误。

谷歌声明:

ARC 兼容性

当库源文件直接编译到使用 ARC 的项目中时,必须专门为库源禁用 ARC。

要在 Xcode 4 中对源文件禁用 ARC,请在 Xcode 中选择项目和目标。在目标“Build Phases”选项卡下,展开 Compile Sources 构建阶段,选择库源文件,然后按 Enter 键打开编辑字段,输入 -fno-objc-arc 作为这些文件的编译器标志。

(reference)

但由于我只有头文件,我不能在应用程序目标中使用此标志。

【问题讨论】:

    标签: ios gdata-api automatic-ref-counting


    【解决方案1】:

    好吧,我问了 10 分钟后发现了不发誓的人。任何方式,如果它会帮助某人:

    1. 问题仅在于 .h 文件,Goole 备注仅适用于您将库嵌入而不是静态库的情况。
    2. 有人向谷歌报告问题后,他们添加了解决问题的新宏,方法如下:

    在头文件中搜索名为:GDataDefines.h 的文件 并在里面添加这段代码:

    //
    // Simple macros to allow building headers for non-ARC files
    // into ARC apps
    //
    
    #ifndef GDATA_REQUIRES_ARC
    #if defined(__clang__)
    #if __has_feature(objc_arc)
    #define GDATA_REQUIRES_ARC 1
    #endif
    #endif
    #endif
    
    #if GDATA_REQUIRES_ARC
    #define GDATA_UNSAFE_UNRETAINED __unsafe_unretained
    #else
    #define GDATA_UNSAFE_UNRETAINED
    #endif
    

    然后在导致 ARC 错误的 GDataObject.h 中

    将 GDataDescriptionRecord 结构更改为

       typedef struct GDataDescriptionRecord {
           NSString GDATA_UNSAFE_UNRETAINED *label;
           NSString GDATA_UNSAFE_UNRETAINED  *keyPath;
           GDataDescRecTypes reportType;
       } GDataDescriptionRecord;
    

    还有

       __weak GDataObject *parent_;  // parent in tree of GData objects
    

       GDataObject GDATA_UNSAFE_UNRETAINED *parent_;
    

    这是谷歌更新的链接: http://code.google.com/p/gdata-objectivec-client/source/detail?r=712

    就是这样。

    希望对大家有所帮助

    沙尼

    【讨论】:

    • 链接到 r=712 正在重定向,并且在 archive.org 上不可用
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-05-03
    • 1970-01-01
    • 2023-03-17
    • 2011-12-26
    相关资源
    最近更新 更多