【问题标题】:Framework fails to link in Xcode 10框架无法在 Xcode 10 中链接
【发布时间】:2018-09-20 12:53:03
【问题描述】:

我的应用程序使用静态框架“A”(作为依赖项构建),该框架本身使用静态框架“B”。在 Xcode 9 中,它构建并运行良好。在 Xcode 10 中,我得到“架构 x86_64 的未定义符号”,后跟从“B”中定义的“A”引用的符号列表。似乎符号定义存在于“A”中,但不存在于数据中。 Xcode 9 包含“A”中的数据,但 Xcode 10 不包含。

使用 Xcode 9:

nm -m -arch x86_64 "A" | grep "<symbol from B>"
                 (undefined) external _<symbol from B>
0000000000000f20 (__DATA,__const) external _<symbol from B>

使用 Xcode 10:

nm -m -arch x86_64 "A" | grep "<symbol from B>"
                 (undefined) external _<symbol from B>

为什么这只在 Xcode 10 中失败?

【问题讨论】:

  • 如您的previous version 所示,nm 告诉您B 符号在A引用未定义 .因此,您需要链接 B 来解析这些引用,但没有这样做。如果您以前这样做过,您可能如何停止链接 B,从这里看不到。
  • Mike,我可以在 Xcode 9 和 10 之间切换。使用 9,“A”包含来自“B”的符号数据。使用 10 则不会。发生了一些变化,导致 Xcode 10 剥离或不包括“A”中的符号数据。
  • 这很清楚,你是对的。恐怕帮不上忙。
  • Xcode 10 中的 libtool 命令似乎没有将“Link Binary with Libraries”中列出的框架传递给它,而它在 Xcode 9 中确实如此。

标签: ios xcode linker xcode10


【解决方案1】:

2020 Xcode 12 编辑:虽然最初的问题似乎已得到修复,但如果库 B 的 iOS 部署目标低于库 A,则仍会出现此问题。

由于某种原因,Xcode 10 在创建静态库“A”时不会将“Link Binary with Libraries”中列出的项目传递给 libtool。这可能是一个错误或者可能有一些逻辑,我将提交一个错误报告。一种解决方法是将以下内容添加到“A”的构建设置中的“Other Librarian Flags”中:

"${BUILT_PRODUCTS_DIR}/B.framework/B"

【讨论】:

  • 您收到关于该错误报告的任何回复了吗?
  • 它们在 Xcode 10.2 中已修复。我不记得它是否已修复,但我想可能是。
  • 非常感谢顺便说一句!
猜你喜欢
  • 1970-01-01
  • 2017-11-09
  • 1970-01-01
  • 1970-01-01
  • 2013-03-23
  • 1970-01-01
  • 2011-07-30
  • 2020-01-20
相关资源
最近更新 更多