静态库依赖关系未包含在二进制文件中

时间:2011-07-01 07:06:43

标签: ios

我已经构建了一个静态库(我们称之为A),它依赖于CFNetwork.framework,它正在xCode中成功构建。我已将CFNetwork.framework包含在“链接二进制文件库”构建阶段中。这个静态库有自己的项目。

出于某种原因,当试图在另一个项目中使用这个静态库时(让我们称之为B),它在链接阶段失败,抱怨无法找到CFNetwork的符号。

我在B的目标中添加了A作为依赖项(因此A总是在B成功之前编译)并且我还在B的“Link Binary With Libraries”构建阶段添加了A.

有没有人遇到过类似的问题?

编辑:如果我将CFNetwork.framework添加到B的“Link Binary With Libraries”构建中,它将开始成功构建。

1 个答案:

答案 0 :(得分:1)

是的,您还需要在项目CFNetwork.framework中添加B作为依赖项。

这是设置依赖项的正确方法。您需要在静态库CFNetwork.framework的发行说明中记录对A的依赖性。

绝对要看看Guidelines for Creating Frameworks,特别是“您的框架中包含的内容”。您将看到Apple建议不要创建伞形框架(即在分布式静态库中包含类似CFNetwork.framework的内容)。

  

不要创建伞框架

     

虽然可以使用Xcode创建伞形框架,但仍然可以   所以对大多数开发人员来说是不必要的,不推荐。苹果   使用伞形框架来掩盖它们之间的一些相互依赖关系   操作系统中的库。在几乎所有情况下,你应该是   能够将您的代码包含在单个标准框架包中。   或者,如果您的代码足够模块化,您可以创建   多个框架,但在这种情况下,之间的依赖关系   模块将是最小的或不存在的,不应该保证   为他们创造一把伞。

如果您有很多依赖项,那么值得考虑像Cocoapods这样的依赖项管理工具。