静态库path恶梦从地狱
这是重点。 我有一个子项目(静态库)创build。 图书馆编译得很好。 没有错误。 当我将这个库包含在一个项目中,并从项目库中导入一个头时,库无法编译,因为它找不到属于它自己的path。
在networking上关于如何创build一个静态库并将其embedded到一个项目中的一堆教程之后,我不知道哪一个是正确的,因为我试过所有的都失败了,有些不同。
这是如何设置图书馆:
静态库
构build设置:
- 公共头文件夹path=
$(BUILT_PRODUCTS_DIR)
- 标题searchpath=
$(SRCROOT)
(recursion)
build立阶段
COPY FILES = 1文件,myLibrary.h基本上是空的(当我使用静态库模板启动库时,由xcode创build)。
没有添加复制标题阶段
主要项目
构build设置
- 标题searchpath=空
- 用户头部searchpath=
$(BUILT_PRODUCTS_DIR)
(recursion) - 始终search用户path=
YES
build立阶段
- 是的,
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.h
和MyStaticLibrary.h
, cocos2d.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”