我是否需要链接依赖关系链接的库?

时间:2013-08-30 07:43:14

标签: xcode cocoa static-linking

我正在尝试使用Xcode在Objective C和C ++中为iOS编写一个简单的游戏引擎。

我制作了游戏项目和游戏引擎项目。后者作为子项目添加到前者中。该引擎还作为目标依赖项添加,并作为二进制文件添加到游戏项目中。

我的引擎使用CADisplayLink所以我在引擎项目的“使用库列表链接二进制文件”中添加QuartzCore.framework(在构建阶段中找到)。

现在,当我尝试构建我的游戏项目(包含子项目的项目)时,我收到此错误:

Undefined symbols for architecture i386: "_OBJC_CLASS_$_CADisplayLink", referenced from: objc-class-ref in libVoya-iOS.a

此错误仅在从游戏项目构建时发生 - 从引擎项目中执行此操作正常。如果我将QuartzCore.framework添加到游戏项目构建工作正常。

我真的需要特别要求我的目标依赖项之一已经需要的框架吗?在这种情况下:我的引擎(子项目)已经链接了QuartzCore - 是否真的有必要在使用此引擎的项目中执行此操作?感觉就像是无缘无故的双重工作。

或许我只是完全误解了什么? :)

3 个答案:

答案 0 :(得分:10)

添加QuartzCore框架来解决此问题。

答案 1 :(得分:1)

我现在找到了问题的答案,我想分享一下。

静态库只不过是库源文件的编译版本的一组。它们不包括他们自己可能依赖的任何库。

只有在最后构建实际的可执行文件时才会将所有依赖项融合在一起。因此,您的应用程序应该确实链接到依赖项的依赖项。

至于我的问题中的例子,这意味着我的游戏应该链接QuartzCore而我的游戏引擎不应该(即使是我的GameEngine正在使用它)。

在此处了解详情:

答案 2 :(得分:0)

我相信这是因为您使用的是目标依赖项,而不是链接到预编译库。