2013-04-14 31 views
14

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

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

这是库的设置方式:


静态库

生成设置:

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

构建阶段

复制文件= 1个文件,myLibrary.h,基本上是空的(当我使用的静态库模板以启动库通过xcode的创建。

没有ADD COPY HEADERS


MAIN PROJECT

构建设置

  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

+0

添加'Run Script'构建阶段,在失败阶段之前执行,检查'显示构建日志中的环境变量',启动在'Log Navigator'上建立并检查路径。 –

+0

和脚本是空的?只是?这样做只显示了日志导航器上已经显示的内容。 – SpaceDog

+0

我已经上传了一个示例项目到这里:https://mega.co.nz/#!mBQhiRQS!Mz0wRh9wdhbKsW_KxE5F8iL2Q11gocuHlAB0ibQOoDo 所以你可以看到我的意思。 – SpaceDog

回答

3

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

你尝试具体包括在标题搜索路径的平台目录?据推测,平台位于源目录中,而不是$(BUILT_PRODUCTS_DIR),因此可能无法在当前设置中进行搜索。

+0

您是否尝试过我已上传的示例项目?查看我的问题的最后一段。谢谢。 – SpaceDog

+0

@RubberDuck我相信他的想法和我的一样:添加正确的标题搜索路径。您也可以使用“Build Locations”设置来使libs和主要项目的构建文件位于相同的根产品目录中。 –

+0

顺便说一句,我试过你的答案,不幸的是它不适合我。我即将放弃在Xcode上构建静态库。对Xcode而言,苹果是另一种耻辱。谢谢你的努力。 – SpaceDog

3

关于脚本来显示你env中的变量,这里就是我如何做到这一点(在新标签中打开图片以获取更好的缩放):

  • 追加的虚拟shell脚本

enter image description here

  • 在Log导航仪处观察其输出

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)也将(递归)具有库的公共标题。

+0

谢谢。我会稍后再尝试。顺便说一句,苹果一定是在与开发者开玩笑。 – SpaceDog

+0

@RubberDuck为什么,你是否遵循了developer.apple.com的任何指南,它不工作?我想这是因为缺少来自cocos2d的文档或任何你想使用的库,Xcode的工作非常好。 –

+0

我不这么认为。 Xcode 4是一个废话。它由于愚蠢的原因而崩溃了几次,例如通过使用查找器删除项目正在使用的图像文件。是的,我遵循了Apple的指南以及网络上其他站点的大约10个指南。问题不在于科科斯。 Xcode必须找到它在项目中导入的所有编译任何路径。这就像在文本编辑器上导入图像,在那里看到该图像,将其插入文本,格式化所有内容,并且当您要打印文档时,编辑器会告诉您图像无法找到。 – SpaceDog

12

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

首先,你需要添加页眉下的搜索路径MyProject目标的生成设置的条目,从而使文件,如HelloWorldLayer.h,这#import "cocos2d.h",知道在哪里可以找到该文件。

Header Search Paths,我进入../MyStaticLibrary/MyStaticLibrary/libs/**像显示在下面的图片:

enter image description here

这解决了预处理器无法找到从MyStaticLibrary必要的源文件的问题,为MyProject项目,但编译后,我得到了关于丢失符号的错误。我需要内置libMyStaticLibrary.a添加到Link Binary With Libraries步一样显示在下面的图片:

enter image description here

之后,该项目编译罚款。

0

请试试这个...

第一步:右击“projectName.xcodeproj”(静态库)。选择“获取信息”,并复制从(常规 - >在哪里)

第二步的完整路径:为主项目(目标和项目)粘贴'标题搜索路径'的完整路径