14

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

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

这是设置库的方式:


静态库

构建设置:

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

构建阶段

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

没有ADD COPY HEADERS阶段


主要项目

构建设置

  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"

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

有什么想法吗?

我已将示例项目上传到此处此处

4

5 回答 5

12

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

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

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

在此处输入图像描述

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

在此处输入图像描述

之后,项目编译正常。

于 2013-04-16T20:40:16.573 回答
3

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

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

于 2013-04-15T19:58:35.050 回答
3

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

  • 添加了虚拟shell脚本

在此处输入图像描述

  • 在 Log Navigator 观察其输出

在此处输入图像描述

在此处输入图像描述

在此处输入图像描述


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

在此处输入图像描述 在此处输入图像描述

现在因为有两个标头cocos2d.hMyStaticLibrary.h,cocos2d.h已成功导入,尽管它会有额外的依赖。

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

于 2013-04-16T09:58:34.570 回答
2

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

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

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

于 2013-04-16T20:26:36.157 回答
0

请试试这个……</p>

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

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

于 2013-04-23T08:58:49.887 回答