【问题标题】:How to link to coco2d static library (1.1 beta 2) using workspaces in Xcode 4.3.1如何使用 Xcode 4.3.1 中的工作区链接到 coco2d 静态库(1.1 beta 2)
【发布时间】:2012-04-09 06:07:22
【问题描述】:

到目前为止,我已经完成了以下工作:

  1. 创建的工作区
  2. 添加了我的项目
  3. 添加了 Cocos2d iOS 项目(通过拖放到项目导航器中)。它是我的项目的兄弟姐妹(不是孩子)。
  4. 在我的项目中,在构建阶段,链接到 libcocos2d.a
  5. 在我的项目的构建设置中 - 将始终搜索路径设置为 YES
  6. 创建的源树变量指向包含 cocos2d iOS xcodeproj 文件的文件夹。
  7. 在我的项目的用户标头路径中,添加了步骤 6 中的源树变量。设置为递归。 8.在项目导航器中,单击 libcocos2d.a 库(显示为红色)。设置位置“相对于构建产品”您在 Xcode 4.3.1 的最右侧窗口中设置。
  8. 关闭工作区,并在 TextWrangler 中打开 pbxproj 文件。搜索包含 libcocos2d.a 的路径 删除路径,因此该条目仅读取 "libcocos2d.a" 。这是因为编译后的库无论如何都在应用程序的同一构建目录中。

Codesense 和自动完成功能。但这不会编译。当我尝试构建时,会弹出大约 70 个链接器错误,都说如下:

架构 armv7 的未定义符号: “_OBJC_CLASS_$_CCDirector”,引用自: AppDelegate.o 中的 objc-class-ref ViewController.o 中的 objc-class-ref “_kEAGLColorFormatRGB565”,引用自: -[RIAppDelegate applicationDidFinishLaunching:] 在 AppDelegate.o “_OBJC_CLASS_$_CCTexture2D”,引用自: AppDelegate.o 中的 objc-class-ref “_OBJC_CLASS_$_EAGLView”,引用自: AppDelegate.o 中的 objc-class-ref

如果我尝试为模拟器构建,而不是 armv7,它会说 i386 缺少符号。 cocos2d 项目本身可以编译和构建。出现上述错误的是我的项目。

cocos2d 库在我尝试构建后出现在我的应用的构建目录中。

编辑:忘了提。我还为我的项目编辑了方案,使其不并行构建。我还添加了 cocos2d 目标,并将其置于列表的顶部(因此它应该首先构建)。

编辑:澄清一下 - 在对 pbxproj 文件进行了如上所述的更改后,libcocos2d.a 文件不再是红色的。看起来很正常。即使存在链接错误并且构建失败,我的应用程序也已构建。 (它实际上并没有构建,但产品不是“红色”。一个应用程序文件在与 cocos2d 库的生成位置相同的位置创建。

【问题讨论】:

  • 除非你真的需要自己做,否则你应该考虑使用 Kobold2D (kobold2d.com)。 Cocos2D 已经设置为静态库,所有其他库也是如此,并且还启用了 ARC。您无需再担心任何这些技术问题。只需安装并开始处理您的项目。
  • 感谢 Steffen,但我对使用 Kobol2D 不感兴趣。

标签: ios xcode4 cocos2d-iphone static-libraries static-linking


【解决方案1】:

我一直在尝试使用 Cocos2d 作为静态库,而不是模板。原因是它可以更轻松地以模块化方式开发我的项目。此外,它使 cocos2d 版本等之间的切换更容易。搜索了cocos2d-x论坛后发现了这个链接:http://cfc.kizzx2.com/index.php/cocos2d-x-with-xcode-4-from-scratch-without-template/

我找到了需要添加的框架,并且解决了所有链接问题。

我还没有向商店提交申请,所以如果有更多经验的人可以检查一下是否有任何陷阱/错误,那就太好了。英语对我来说是第二语言,所以请不要介意。这是使用 cocos2d1.1beta2 和 Xcode 4.3.1 完成的

  1. 创建 Xcode 工作区
  2. 导航到包含 cocos2d xcodeproj 文件的文件夹 (iOS / Mac)。这是你下载 cocos2d 后解压的地方。
  3. 将 xcodeproj 文件拖放到 Xcode 的导航器窗口中。(最左边的窗口)。
  4. 单击 cocos2d 项目文件附近的小三角形,使其所有内容消失。
  5. 通过右键单击导航器和“新建项目”,将新项目添加到您的工作区。确保将项目作为兄弟项目添加到 cocos2d 项目,而不是作为子项目。我选择了单窗口应用程序(iOS)
  6. 在这个新项目中,转到构建设置,并将“始终搜索用户路径”更改为“是”
  7. 将 cocos2d 文件夹的位置添加到“用户标题搜索路径”。如果您愿意,您可以将 cocos2d 文件夹添加到 Xcode 中的源代码树列表中,而只需在此处填写变量的名称。例如: ${COCOS2D_SRC} 。如果以后您想更改构建环境的文件夹结构,这将非常方便。

  8. 单击目标并选择构建阶段选项卡。您希望将以下二进制文件与您的库链接。确保他们在那里。 libcocos2d.a libz.dylib libxml2.dylib OpenGLES.framework QuartzCore.framework UIKit.framework 基础框架 CoreGraphics.framework

如果 libcocos2d.a 是“红色”,那么不用担心。它仍然可以正确编译/链接。

  1. 在构建设置下,将“仅构建活动架构”更改为“是”。

否则,您可能会忽略文件 /Users/Pteriedaktyl/Library/Developer/Xcode/DerivedData/Build/Products/Debug-iphoneos/libcocos2d.a,文件是为存档而构建的,它不是被链接的架构(armv6 )

  1. 在您的 info.plist 文件中,确保删除“所需设备功能”中的 armv7 条目。否则,您的代码将只能在较新的设备上运行。

现在你准备好了!您应该能够从兄弟项目访问 cocos2d api。如果您想更改 cocos2d 的版本,您只需更改工作区中的 cocos2d 项目,更新源树路径(如果需要),并链接到新的 libCocos2d.a

测试: 为了试一试,我修改了应用程序委托和视图控制器代码,以匹配我的一个旧 hello world 项目中的代码。

请尝试一下,如果您有任何问题,请添加到线程中。

【讨论】:

    【解决方案2】:

    在 libCocos2d.a 的 Utilities 窗格中,在您将库设置为相对于 Build Products 的 Identity 和 Type 下方,滚动到底部并确保为您的目标选择了 Target Membership。如果不是,它不会将其包含在目标生成的实际构建中。至少,这是我能够重现此问题的唯一方法。

    【讨论】:

    • 那么您是说当您按照我提出的步骤进行操作时,您看不到任何错误?
    • 只要 Target 成员资格设置为 yes,它就可以工作并且不会出现任何错误。
    • 你的app有没有访问cocos2d api的代码?如果没有代码,则构建良好。
    • 为我的目标选择了我的目标成员。如果您确实有解决方案,请列出您为编译代码所做的所有步骤。请记住,只有在您实际访问 cocos2d api 时才会弹出错误。如果你不使用cocos2d api,那么我上面指定的步骤,允许代码编译。
    猜你喜欢
    • 1970-01-01
    • 2023-04-03
    • 1970-01-01
    • 2021-11-06
    • 1970-01-01
    • 1970-01-01
    • 2018-01-23
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多