来自地狱的静态图书馆路径噩梦

时间:2013-04-14 14:09:12

标签: iphone ios cocoa-touch cocoa

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

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

这是库的设置方式:


静态图书馆

构建设置:

  1. 公共标题文件夹路径= $(BUILT_PRODUCTS_DIR)
  2. 标题搜索路径= $(SRCROOT) (递归)
  3. 构建阶段

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

    添加复制标题阶段


    主要项目

    构建设置

    1. 标题搜索路径=空
    2. 用户标题搜索路径= $(BUILT_PRODUCTS_DIR) (递归)
    3. 始终搜索用户路径= YES
    4. 构建阶段

      1. 是的,myLibrary.a是目标依赖项
      2. 让我感到惊讶的是,图书馆单独编译好,但是当放入项目时,无法找到属于自己库的标题。

        注意:我还尝试在库上创建一个复制标题阶段,在该库上公开所有.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"
        

        我已经失去了两天试图解决这场噩梦。

        有什么想法吗?

        我已将示例项目上传到 here here

5 个答案:

答案 0 :(得分:12)

下载您的示例项目后,我通过进行以下更改让它在几分钟内完成。

首先,您需要在标题搜索路径下为MyProject目标的构建设置添加一个条目,以便HelloWorldLayer.h这样的文件#import "cocos2d.h"知道在哪里找到该条目文件。

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

enter image description here

这解决了预处理器无法从MyStaticLibraryMyProject项目找到必要的源文件的问题,但是在编译之后,我收到了关于丢失符号的错误。我需要将构建的libMyStaticLibrary.a添加到Link Binary With Libraries步骤,如下图所示:

enter image description here

之后,项目编译得很好。

答案 1 :(得分:3)

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

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

答案 2 :(得分:3)

关于向您显示env变量的脚本,这是我的工作方式(在新选项卡中打开图像以获得更好的缩放):

  • 添加了虚拟shell脚本

enter image description here

  • 在Log Navigator
  • 中观察其输出

enter image description here

enter image description here

enter image description here


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

enter image description here enter image description here

现在有两个标题cocos2d.hMyStaticLibrary.hcocos2d.h已成功导入,但它会有额外的依赖关系。

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

答案 3 :(得分:2)

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

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

感谢每一个人试图解决这个问题。

答案 4 :(得分:0)

请试试这个......

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

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