2012-02-23 52 views
8

我的問題

我得到「_OBJC_CLASS _ $ ...,從引用:」鏈接錯誤編譯一些的Xcode項目(它發生在iOS和Mac的項目)我已經正確鏈接的框架和進口時。

設置

  • 一個應用目標
  • 一個測試目標
  • 所有的框架正確

掛在編譯,我得到以下鏈接錯誤: 「_OBJC_CLASS _ $ _ JGCountdownTimer」 ,引用自: JGCountdownTimerTestCase.o中的objc-class-ref

對於測試中使用的許多類。

我已經試過

  • 檢查發現進口都存在
  • 取消了所有非標準的框架
  • 如果我編譯一個類檢測的藥物靶標和靶應用它修復問題。但之後我收到了編譯器的其他警告。
+2

在你的目標 - 構建階段檢查JGCountdownTimer.m文件丟失? – 0x8badf00d 2012-02-23 00:09:32

+0

正如我確信你知道的那樣,這意味着在編譯過程中使用了名稱(JGCountdownTimer),但是在鏈接過程中未找到目標文件。 JGCountdownTimer是來自二進制還是類文件?我唯一遇到這個問題的原因是循環引用。情況會是這樣嗎?如果是,請使用@class指令。祝你好運。 – Avi 2012-02-23 00:14:36

+0

嘿chaps - 感謝評論。我在發佈之前解決了這個問題,但是我找不到任何其他帖子,因此我提出了一個問題,以便我可以自己回答,並且有權威答案! – 2012-02-23 09:06:53

回答

11

快速解答

複製並粘貼以下行到您的構建設置:

GCC_SYMBOLS_PRIVATE_EXTERN = NO

在目標構建設置找到「默認隱藏符號」 。對於調試配置你想要「不」。

我已經有這個問題關閉了好幾個月,我剛剛發現了原因。

+1

你也可以用'__attribute __((visibility(「default」)))'' – Wevah 2012-02-23 01:25:30

+0

嗯。尼斯。你每天學習新的東西。謝謝! – 2012-02-23 09:07:34

+11

在建立設置在哪裏粘貼GCC的東西? – 2013-06-04 05:22:05

2

不確定這是否可能是問題,但是對於新編譯器,任何未顯式引用/調用的obj-c將不會從庫中鏈接。例如,當您在庫中實現類別時,會導致問題。

嘗試在構建設置面板中爲目標添加'-ObjC'到'其他鏈接器標記'。 聳肩

+0

感謝您的快速答覆 - 我發佈這個,因爲我實際上找到了解決方案,它驅使我瘋狂瘋狂,我找不到答案在任何地方,所以我想我會在這裏發佈一些其他倒黴的靈魂誰得到這個鏈接器錯誤,並不明白爲什麼。 – 2012-02-23 00:10:38

+2

這個答案有點令人誤解。鏈接靜態庫時,默認情況下,編譯器(gcc和clang)只會鏈接以某種方式引用的庫的成員。指定'-ObjC'鏈接器標誌意味着鏈接所有具有Obj-C類/類別信息的成員。這完全不影響dylib,或應用程序代碼,只是靜態庫。 – 2012-02-23 00:13:07

+0

哦,哦。看起來像你正在使用GCC,對吧? – nielsbot 2012-02-23 00:13:34

10

我遇到過類似的問題。我得到了鏈接錯誤:

_OBJC_CLASS_$_MyClass

的問題是,我宣佈了MyClass@interface但還沒有宣佈其相應@implementation

此修復程序是簡單地添加

@implementation MyClass 
@end 
相關問題