2

我正在尝试使用 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 - 真的有必要在使用这个引擎的项目中这样做吗?感觉就像无缘无故的双重工作。

或者也许我只是完全误解了一些东西?:)

4

3 回答 3

10

添加 QuartzCore 框架来解决这个问题。

于 2014-09-04T17:51:16.933 回答
1

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

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

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

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

在此处了解更多信息:

于 2013-09-01T16:32:29.180 回答
0

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

于 2013-08-31T19:39:49.253 回答