16

我目前有一个用于非常大的代码库的 Xcode 项目,我将其称为Project X,我将其划分为一堆子项目(项目 A、B、C)。

到目前为止,这些项目中的每一个都可以自行编译。它们都产生静态库。项目 B项目 C依赖于项目 A生成的静态库才能构建。

我有另一个 xcode 项目Project Z,它需要由Projects B 和 C生成的静态库。问题就在这里。当项目 Z进入链接器阶段时,事情就会爆炸——在项目 B 和 C的库中发现了它们最初在项目 A中链接的代码的重复符号!

我对静态库的世界还很陌生,我不确定如何继续使用Project Z,或者如何修改其他项目以便它们链接到同一个Project A库。我有一种感觉,这是不可能的。我在这里有什么选择?

编辑:

我应该澄清一下,项目 B项目 C需要构建到单独的静态库中,因为某些客户端只需要一个或另一个。

此外,我在 OSX 和 iOS 平台上都遇到了这种困境。

我意识到我可以通过将项目构建为动态库来解决 OSX 上的这个问题。但是,我不想这样做,它仍然让我在 iOS 上遇到同样的问题。

4

2 回答 2

18

静态库不应包含其他静态库(或一般的第三方代码)。静态库只是粘合在一起的一束 .o 文件。所以如果你有多个相同信息的副本,它就会爆炸。

每个静态库都应该有自己的代码。最终的应用程序负责将所有需要的库链接在一起(包括库所需的库)。这样,每个链接的事物都只有一个副本。

于 2012-08-01T19:08:38.460 回答
2

这听起来正是CoacoaPods为解决的问题而创建的。如果您为这些项目中的每一个定义 pod,那么Z应该能够在不引入重复符号的情况下确定并链接到它的所有依赖项。

于 2012-08-01T17:22:02.340 回答