3

因此,我过去曾多次嵌套静态库,但从来没有像这样嵌套过,这引起了一些问题。

现在让我们假设我有 3 个静态库,A、B 和 C。以及一个使用它们的项目,如下所示。

A 是由常用的自定义视图、数据结构和类别组成的基础库。B 是与 A 链接的库,其中包含在多个项目之间共享的视图控制器。C 是另一个与 A 链接的库,其中包含在多个项目之间共享的视图控制器。

这个特定的项目使用 B 和 C 的代码。所以结构如下所示:

   A
  / \
 B   C
  \ /
Project

而且由于 Xcode 链接静态库的方式基本上是合并它们,B 和 C 都具有 A 的所有符号。所以我得到了重复的符号链接器错误。我该如何处理这个问题?我需要弱链接吗?还是我缺少一个特定的标志?我是否需要设置某种类型的依赖关系其他感谢链接二进制文件?

我用谷歌搜索并在这里搜索,发现了很多很好的信息,但没有任何我能够扭曲到这种特殊情况。

更新的想法

所以让我问这个问题,因为它似乎是一个可能的解决方案,因为在阅读了能够合并的静态库之后确实不应该这样做。

我应该将它们全部放在一个项目中并且仅具有多个静态库目标,而不是拥有 3 个独立的静态库吗?甚至不使用目标依赖关系,只使用 A、AB 和 AC,以及包含目标文件和标题的 ABC 目标?毫无疑问,这对于构建设置来说会相当复杂,并且可能会使源代码分发变得有点复杂,但它会解决我当前的问题,并且可能是更好的处理方式。怎么想?

4

1 回答 1

2

看起来您没有正确创建静态库BC因为您正在包含来自静态库的目标文件A。这是不正确的。取而代之的是 make AB并且C只包含它们自己的类的目标文件,并将它们全部放在Project二进制文件的最终链接中。

  • 您必须允许B查看A的头文件才能正确编译。

  • 您必须允许C查看A的头文件才能正确编译。

  • 您必须允许Project查看A's、B's 和C' 头文件才能正确编译,以及A's、B's 和C' 库 ( .a) 文件才能正确链接。

认为一旦您正确设置了项目依赖项,Xcode Workspace 将为您处理所有标题/库搜索路径设置,但我可能错了,您可能必须自己设置这些路径。

于 2013-01-22T14:33:30.710 回答