【发布时间】: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 中确实如此。