【发布时间】:2014-08-07 13:52:04
【问题描述】:
我正在编写一个依赖于静态第三方库 Lib 的 iOS 框架 Foo,但在正确链接时遇到问题。
如果Foo 是一个静态库,我会不将它与Lib 链接,并且只将主项目与它们两者链接。但这种方法似乎不适用于框架:链接器抱怨缺少来自 Lib 的符号。
所以我采用了另一种方法并将Foo 与Lib 联系起来。现在链接器很高兴,但有一个明显的问题:如果主项目出于自身原因使用Lib 并同时链接Foo 和Lib,我会得到重复的符号:
Class <Something> is implemented in both <Here> and <There>.
One of the two will be used. Which one is undefined.
我知道我可以停止将应用程序与 Lib 关联,一切都会好起来的,但我想把事情做好。怎么样?
【问题讨论】:
-
这是一个动态框架吗? (现在才将其支持引入 iOS AFAIK)。
-
这是 Apple 在 OS X 上所谓的“私有框架”。捆绑在应用程序包中的框架,不链接到其二进制文件。这可能意味着是的,它是一个动态框架。 (这里是question about the status of these frameworks on iOS。)
-
如果是这种情况,那么 1) 您需要检查对您想要支持的 iOS 版本的支持(要知道仅支持静态框架,这些框架是具有相关资源的美化静态库)。 2) 重复符号没有意义,因为二进制文件是完全独立的(想想 .exe 和 .dll)。
-
哦,这是运行时抱怨,而不是链接器。对我来说应该很明显,我只在运行时收到警告。我将编辑问题。
-
啊,我以前见过,它让我脊背发凉(因为它看起来很阴险)。但是我不记得解决方案是什么:)
标签: ios xcode frameworks linker