【问题标题】:iOS framework with dependencies具有依赖项的 iOS 框架
【发布时间】:2012-12-21 02:25:51
【问题描述】:

我已经创建了两个 iOS .frameworks

它们都完美编译

我的结构如下:

iPadProject
  - framework1
     - framework2

所以Framework2包含在framework1中,framework1包含在实际的iPad项目中

所以我的问题是,如果我将 framework1 和 framework2 添加到我的 iPadProject 中,它将无法编译,因为它抱怨来自 framework2 的重复符号(这是合乎逻辑的,因为它已经包含在 framework1 中)

但是,如果我只在我的 iPadProject 中包含 framework1,当我从 framework1 访问一个方法时,他又从 framework2 访问一个方法,它会使用“signal SIGABRT”使应用程序崩溃

【问题讨论】:

    标签: objective-c ios frameworks dependencies


    【解决方案1】:

    问题在于,因为它现在是嵌套的,所以链接器将 f2 链接到 f1——但只有 f1 需要的 f2 部分。

    喜欢

    f2 有 5 个符号 (f2_1 - 5)
    f1 使用 f2_1 和 f2_2 但不是 3,4,5
    => 链接器将其丢弃

    现在应用需要 f2_3、f2_4 和 f2_5,但它们不存在……但在编译时没有人知道。


    现在您尝试通过再次将应用程序与 f2 链接来解决它,但与以前一样,在编译时没有人优化链接器 f2_3 - 5 并且假定它们在 f1 中,因此是重复的!


    已经提到的解决这个 Rob Napier 的方法。 不要嵌套框架(主要不是静态框架/第三部分)

    解决方法是在 f1 链接到 f2 时将 -all_load 传递给链接器!

    【讨论】:

      【解决方案2】:

      不要嵌套静态库,包括 iOS 框架。正如您所看到的,它会导致重大问题(当两个框架都有自己的第三个框架时,它会导致更多问题)。最后的链接步骤应该链接所有需要的库;静态库不应该链接其他静态库。没有真正好的方法可以自动执行此操作。它只是框架文档的一部分。

      但是,您不应该因为未能链接框架而收到运行时异常。您应该得到链接时失败,表明符号未定义。如果您遇到崩溃,则表明您在链接中做了一些奇怪的事情。

      【讨论】:

      • 嗨@rob,如果我尝试在主机应用程序和主机应用程序的框架内使用框架,我应该如何处理我的架构?
      • 我不明白评论。您可能想整理一个具体的问题示例并将其作为一个新问题提出。
      猜你喜欢
      • 2021-02-19
      • 2014-01-22
      • 1970-01-01
      • 2014-05-28
      • 2020-11-02
      • 1970-01-01
      • 1970-01-01
      • 2012-02-04
      • 2010-09-05
      相关资源
      最近更新 更多