2010-11-01 77 views
0

我正在使用一堆自定义静态库来构建测试应用程序。但是,我不断收到以下链接器错误:"_OBJC_CLASS_$_<MainClassOfMiddleLevelLibrary>", referenced from: objc-class-ref-to-MainClassOfMiddleLevelLibrary in lib<HighLevelLibrary>.a(<HighLevelLibrary>.o)但是,当我构建(HighLevelLibrary)项目时,它链接并构建得很好。我已经设置了标题搜索路径并将这些库包含在我的框架组中。任何想法我失踪?iPhone静态库链接错误

+0

奇怪。当链接(LowLevelLibrary1)和(LowLevelLibrary2)(MiddleLevelLibrary)都依赖时,但当我添加(MiddleLevelLibrary)它宣称它无法找到(MiddleLevelLibrary)的主类时,正常工作。 – Grimless 2010-11-01 20:22:01

回答

1

当您构建一个静态库时,您只是创建* .o文件的存档。没有链接阶段。如果您在静态库中使用了任何已声明但未实现的内容,则将构建库时不会出现任何错误。 当您构建应用程序时,会发生实际链接。所以所有的依赖关系(你的案例中的MiddleLevelLibrary)应该被添加到你的应用程序中(而不是HighLevelLibrary)。

+0

嗯,(MiddleLevelLibrary)是链接到我的应用程序(或无论如何)。我想要构建这个,这样我只需链接到(HighLevelLibrary)以获取它下面的库的所有功能和类。我怀疑这是UIKit和其他“包装器”库的工作原理:它们已经嵌入并已经链接的子库,以便更高级别的库公开更低级别的元素。我要那个。我会怎么做呢?谢谢! – Grimless 2010-11-01 20:14:27

+1

您的意思是“伞架”(http://developer.apple.com/library/mac/documentation/MacOSX/Conceptual/BPFrameworks/Concepts/FrameworkBinding.html#//apple_ref/doc/uid/20002256-BAJICBDD) ? 不确定是否有可能为iphone创建自定义伞形框架。 顺便说一句,静态库!=框架 – Yuras 2010-11-01 22:12:55

+0

是啊。我想只能链接到(HighLevelLibrary)来创建一个工作项目。这甚至可以用静态库吗?有趣的是,我将所有这些东西从Mac框架转移到静态库中。 Mac框架非常容易设置并且工作得很好。然而,将这些东西移植到iPhone的过程一直很糟糕。你会认为这种事情会比较容易,但它确实没有...... – Grimless 2010-11-01 23:44:27