2012-02-23 50 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 
相关问题