静态库path恶梦从地狱

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

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

这是如何设置图书馆:


静态库

构build设置:

  1. 公共头文件夹path= $(BUILT_PRODUCTS_DIR)
  2. 标题searchpath= $(SRCROOT) (recursion)

build立阶段

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

没有添加复制标题阶段


主要项目

构build设置

  1. 标题searchpath=空
  2. 用户头部searchpath= $(BUILT_PRODUCTS_DIR) (recursion)
  3. 始终search用户path= YES

build立阶段

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

令我惊讶的是,图书馆单独编译好,但是当放入一个项目,无法find属于自己的图书馆的头。

注意:我也试图在库上创build一个副本标题阶段,在该库上公开所有的.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" 

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

有什么想法吗?

我已经上传了一个示例项目到这里这里

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

首先,您需要在“标题searchpath”下为MyProject目标的“生成设置”添加一个条目,以使诸如HelloWorldLayer.h这样的文件(其中#import "cocos2d.h" )知道在哪里find该文件。

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

在这里输入图像说明

这解决了预处理程序无法从MyStaticLibrary中为MyProject项目find必需的源文件的MyStaticLibrary ,但是在编译之后,我得到了关于缺less符号的错误。 我需要将内置的libMyStaticLibrary.a添加到Link Binary With Libraries步骤,如下图所示:

在这里输入图像说明

之后,项目编译好了。

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

你是否试过在标题searchpath中特别包含Platforms目录? 据推测,平台是在源目录中,而不是$(BUILT_PRODUCTS_DIR),因此可能不会在您当前的设置中search。

关于脚本来显示你的variables,下面是我如何做(在新标签打开图像更好的缩放比例):

  • 添加了虚拟shell脚本

在这里输入图像说明

  • 在Log Navigator中观察它的输出

在这里输入图像说明

在这里输入图像说明

在这里输入图像说明


如您所见, BUILT_PRODUCTS_DIR没有从库中复制任何标题。 可以手动将标题放在那里(强烈不build议),或将searchpath添加到您知道标题必须位于的位置:

在这里输入图像说明在这里输入图像说明

现在,由于有两个头文件cocos2d.hMyStaticLibrary.hcocos2d.h成功导入了MyStaticLibrary.h ,尽pipe它会有额外的依赖关系。

path../MyStaticLibrary/build/$(BUILD_STYLE)-$(PLATFORM_NAME)也将(recursion地)具有库的公共标题。

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

这是为我工作的唯一解决scheme。 最简单也是最好的。

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

请试试这个…

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

步骤2:将完整path粘贴到主项目(“目标”和“项目”)的“标题searchpath”