我目前有一个非常大的代码库的Xcode项目,我称之为 Project X ,我将其划分为一堆子项目(项目A,B ,C )。
到目前为止,这些项目中的每一个都可以自行编译。它们都产生静态库。 项目B 和项目C 依赖于项目A 生成的静态库,以便构建。
我有另一个xcode项目 Project Z ,需要项目B和C 生成的静态库。这就是问题所在。当 Project Z 进入链接器阶段时,事情就会爆发 - 在项目B和C 的库中找到重复符号,用于项目中最初链接的代码A !
我对静态库世界很陌生,我不确定如何推进 Project Z ,或者如何修改其他项目以便它们与相同的项目A lib。我觉得这是不可能的。我有什么选择?
编辑:
我应该澄清项目B 和项目C 需要构建到单独的静态库中,因为某些客户端只需要一个或另一个。
另外,我在OSX和iOS平台上都遇到了这种困境。
我意识到我可以通过将项目构建为动态库来解决OSX上的这个问题。但是,我不想这样做,它仍然让我在iOS上遇到同样的问题。
答案 0 :(得分:16)
静态库不应包含其他静态库(或一般的第三方代码)。静态库只是一组粘在一起的.o文件。因此,如果你有相同信息的多个副本,它就会爆炸。
每个静态库应该只有自己的代码。最终的应用程序负责将所有必需的库链接在一起(包括库所需的库)。通过这种方式,每件事物都只有一个副本。
答案 1 :(得分:2)
这听起来就像创建要解决的问题CoacoaPods。如果您为每个项目定义pod,那么 Z 应该能够确定并链接其所有依赖关系,而不会引入重复的符号。