我目前有一个非常大的代码库,使用单个 Xcode 项目管理,我称之为项目 X,现在我正在将它划分为若干子项目(项目 A,B,C等)。
到目前为止,这些项目都可以独立编译并生成静态库。 项目 B 和 项目 C 需要使用由 项目 A 生成的静态库来进行编译。
我有另一个 Xcode 项目,项目 Z,需要使用由 项目 B 和 项目 C 生成的静态库。这里出现了问题。当 项目 Z 进入链接器阶段时,会出现问题-在 项目 B 和 项目 C 的库中找到了与它们最初连接到的 项目 A 中重复的符号!
我对静态库的世界还比较陌生,不确定如何解决 项目 Z 的问题,或者如何修改其他项目,以便它们连接到相同的 项目 A 库。我有一种感觉这是不可能的。我有哪些选择?
编辑:
我应该澄清,项目 B 和 项目 C 需要构建成单独的静态库,因为部分客户只需要其中一个。
此外,我在 OSX 和 iOS 平台上都遇到了这个问题。
我意识到我可以通过构建动态库来解决这个问题。但是,我不想这样做,而且在 iOS 上仍然存在同样的问题。
到目前为止,这些项目都可以独立编译并生成静态库。 项目 B 和 项目 C 需要使用由 项目 A 生成的静态库来进行编译。
我有另一个 Xcode 项目,项目 Z,需要使用由 项目 B 和 项目 C 生成的静态库。这里出现了问题。当 项目 Z 进入链接器阶段时,会出现问题-在 项目 B 和 项目 C 的库中找到了与它们最初连接到的 项目 A 中重复的符号!
我对静态库的世界还比较陌生,不确定如何解决 项目 Z 的问题,或者如何修改其他项目,以便它们连接到相同的 项目 A 库。我有一种感觉这是不可能的。我有哪些选择?
编辑:
我应该澄清,项目 B 和 项目 C 需要构建成单独的静态库,因为部分客户只需要其中一个。
此外,我在 OSX 和 iOS 平台上都遇到了这个问题。
我意识到我可以通过构建动态库来解决这个问题。但是,我不想这样做,而且在 iOS 上仍然存在同样的问题。
.o
文件,所以这是可以预期的。.h
文件只是承诺在链接时会有符号可用。它们通常不会生成任何代码或分配(如果它们在C或ObjC中这样做通常是错误的;C++则不同)。构建静态库并不会“跳过链接阶段的这一部分”。当您构建静态库时,没有链接阶段。您将编译为.o
,然后将它们粘合在一起(归档)到.a
。 - Rob Napier