2011-11-28 82 views
1

我有一個問題,我只是不知道如何解決:GData靜態庫:使用-fno-objc-arc從ARC中排除文件?

我在我的應用程序中使用ARC的靜態庫。 Google的說明指出將庫中的頭文件鏈接到項目目標。

問題是,當我這樣做時,我得到編譯器錯誤,因爲GData庫與ARC不兼容。

谷歌指出:

ARC兼容

當庫的源文件被直接編譯到使用ARC項目,然後ARC必須專門爲圖書館資源禁用。

要在Xcode 4中禁用源文件的ARC,請在Xcode中選擇項目和目標。在目標「構建階段」選項卡下,展開編譯源構建階段,選擇庫源文件,然後按Enter打開編輯字段,然後鍵入-fno-objc-arc作爲這些文件的編譯器標誌。

但是,由於我只有頭文件,我不能在應用程序目標中使用此標誌。

有什麼建議嗎?

回答

1

我寫了一個簡單的可重複使用的標頭,可粘貼到您的源文件的頂部或包含在項目作爲一個獨立的頭文件:

https://gist.github.com/1563325

+0

graet,我接受了你的答案,因爲我沒有得到我的積分:) – shannoga

3

嗯,我問,10分鐘後發現了衣服。任何方式,如果它會幫助某人:

  1. 問題是隻有與.h文件,古爾的評論是隻爲您的案件,而不是靜態庫嵌入庫的情況。
  2. 有人報告了這個問題後,以谷歌,他們補充說,解決問題的新的宏,這是多麼:

搜索頭文件的文件名爲:GDataDefines.h 和裏面添加以下代碼:

在這導致ARC錯誤

更改GDataDescriptionRecord結構來

的GDataObject.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 

然後

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

就是這樣。

希望這將幫助別人

沙尼