【问题标题】:Static Library path nightmare from hell来自地狱的静态库路径噩梦
【发布时间】:2013-04-06 16:04:10
【问题描述】:

这就是重点。我创建了一个子项目(静态库)。该库编译良好。没有错误。当我将此库包含在项目中并从项目中的该库导入标头时,该库无法编译,因为它找不到属于自己的路径。

在网上看了一堆关于如何创建静态库并将其嵌入到项目中的教程之后,我不知道哪个是正确的,因为我尝试过所有的都失败了,有些不同。

库是这样设置的:


静态库

建筑设置:

  1. 公共标头文件夹路径 = $(BUILT_PRODUCTS_DIR)
  2. 标头搜索路径 = $(SRCROOT) (递归)

构建阶段

COPY FILES = 1 个文件,myLibrary.h 基本上是空的(我使用静态库模板启动库时由 xcode 创建。

没有添加副本标题阶段


主要项目

构建设置

  1. 标题搜索路径 = 空
  2. 用户头搜索路径=$(BUILT_PRODUCTS_DIR)(递归)
  3. 始终搜索用户路径 = YES

构建阶段

  1. 是的,myLibrary.a 在目标依赖项上

让我吃惊的是,这个库单独编译很好,但是当放在一个项目中时,却找不到属于自己的库的头文件。

注意:我还尝试在库上创建一个复制标头阶段,将该库上的所有 .h 公开,但它也失败了。

这是一个错误的示例:

/Users/mike/Library/Developer/Xcode/DerivedData/MyApp-dnaimaovscreasadhmvgttwjnabc/Build/Products/Debug-iphoneos/include/myLibrary/ccTypes.h:39:9:
fatal error: 'Platforms/CCGL.h' file not found
#import "Platforms/CCGL.h"

我花了两天时间试图解决这个噩梦。

有什么想法吗?

我已将示例项目上传到 herehere

【问题讨论】:

  • 添加Run Script在失败阶段之前执行的构建阶段,检查Show environmental variables in build log,开始构建并检查Log Navigator的路径。
  • 脚本是空的?只是?这样做仅显示日志导航器上已显示的内容。
  • 我已经上传了一个示例项目到这里:mega.co.nz/…,所以你可以明白我的意思。
  • 它说 Safari 已经过时(原文如此),然后要求接受某种使用条款,您能否将项目上传到更友好的主机?我今天晚些时候去看看。
  • 没问题。开始了。请尝试 thisthis

标签: iphone ios cocoa-touch cocoa


【解决方案1】:

(没有足够的代表发表评论...)

您是否尝试在标题搜索路径中专门包含 Platforms 目录?据推测,Platforms 在源目录中,而不是在 $(BUILT_PRODUCTS_DIR) 中,因此在您当前的设置中可能无法搜索。

【讨论】:

  • 我上传的样例项目你试过了吗?请参阅我的问题的最后一段。谢谢。
  • @RubberDuck 我相信他的想法和我的一样:添加正确的标题搜索路径。您还可以使用Build Locations 设置来获取库和主项目的构建文件位于相同的根产品目录中。
  • 顺便说一句,我已经尝试过你的答案,不幸的是它对我不起作用。我即将放弃在 Xcode 上构建静态库。 Xcode 如此糟糕,这对 Apple 来说是另一个耻辱。感谢您的努力。
  • 我找到了解决这个问题的方法。感谢您的努力。你快到了,但还有其他问题。看我的回答。谢谢。
【解决方案2】:

关于向您显示环境变量的脚本,我是这样做的(在新标签中打开图像以获得更好的缩放):

  • 添加了虚拟 shell 脚本

  • 在 Log Navigator 中观察其输出


如您所见,BUILT_PRODUCTS_DIR 没有从库中复制任何标题。手动放置标题(强烈不推荐)或将搜索路径添加到您知道标题必须位于的位置:

现在由于有两个标头cocos2d.hMyStaticLibrary.hcocos2d.h 已成功导入,尽管它会有额外的依赖关系。

../MyStaticLibrary/build/$(BUILD_STYLE)-$(PLATFORM_NAME) 路径也将(递归地)具有库的公共标头。

【讨论】:

  • 谢谢。我稍后会尝试。顺便说一句,苹果一定是在和开发者开玩笑。
  • @RubberDuck 为什么,您是否按照 developer.apple.com 的任何指南进行操作,但没有成功?我猜它的发生是因为 cocos2d 或您想使用的任何库的文档不足,Xcode 做得很好。
  • 我不这么认为。 Xcode 4 是一个废话。由于愚蠢的原因,它崩溃了好几次,比如通过使用 finder 删除项目正在使用的图像文件。是的,我遵循了 Apple 的指南以及网络上其他网站的大约 10 条指南。问题不在于 Cocos。 Xcode 必须找到它编译并导入项目的任何路径。这就像在文本编辑器上导入图像,在那里看到该图像,将其插入文本中,格式化一切正常,当您要打印文档时,编辑器会告诉您找不到图像。
  • 那里显然有两个苹果。消费者之一:我喜欢苹果。一款专为开发人员设计的,比心爱的人晚几光年。
  • 我刚刚快速(花了一两分钟)将$(SRCROOT)/../MyStaticLibrary/libs/cocos2d$(SRCROOT)/../MyStaticLibrary/ 添加到(用户和系统)标头搜索路径,两者都是递归的,将您的库添加到链接阶段(它是丢失),启用always search user path,它构建得很好。 lib 项目有点乱,我想如果你尝试更好地组织它(可能有子库),它会更容易维护。
【解决方案3】:

经过将近 5 天的噩梦试图解决这个问题,我终于找到了这个教程:http://www.youtube.com/watch?v=XUhLETxgcoE

这是唯一对我有用的解决方案。最简单最好的。

感谢每一位尝试解决此问题的人。

【讨论】:

    【解决方案4】:

    下载您的示例项目后,我通过进行以下更改使其在几分钟内运行。

    首先,您需要在 Header Search Paths 下为 MyProject 目标的 Build Settings 添加一个条目,以便 HelloWorldLayer.h#import "cocos2d.h" 等文件知道在哪里可以找到该文件。

    Header Search Paths 下,我输入了../MyStaticLibrary/MyStaticLibrary/libs/**,如下图所示:

    这解决了预处理器无法从MyStaticLibrary 中为MyProject 项目找到必要的源文件的问题,但是编译后,我得到一个关于缺少符号的错误。我需要将构建的libMyStaticLibrary.a 添加到Link Binary With Libraries 步骤中,如下图所示:

    之后,项目编译正常。

    【讨论】:

      【解决方案5】:

      请试试这个……

      步骤1:右键单击“projectName.xcodeproj”(静态库)。选择“获取信息”并从(General->where)复制完整路径

      第 2 步:将完整路径粘贴到主项目(目标和项目)的“标题搜索路径”

      【讨论】:

        猜你喜欢
        • 2011-10-06
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2012-01-12
        • 1970-01-01
        • 2010-12-21
        • 2020-03-14
        相关资源
        最近更新 更多