复杂的静态库链接

时间:2013-01-21 19:36:24

标签: xcode linker static-libraries

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

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

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

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

   A
  / \
 B   C
  \ /
Project

由于Xcode链接静态库的方式基本上合并它们,因此B和C都具有所有A的符号。所以我得到重复的符号链接器错误。我该如何处理这个问题?我需要弱连接吗?或者是否有我失踪的特定旗帜?我是否需要设置某种类型的依赖,其他感谢链接二进制文件?

我用Google搜索并在这里搜索并找到了很多很好的信息,但我没有能够扭转到这种特殊情况。

思考更新

所以让我问这个,因为它似乎是一个可能的解决方案,在阅读静态库后,虽然能够合并真的不应该。

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

1 个答案:

答案 0 :(得分:2)

看起来您没有正确创建静态库BC,因为您包含来自静态库A的目标文件。这是不正确的。相反,让ABC只包含自己的类的目标文件,并将它们全部放在Project二进制文件的最后一个链接中。

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

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

  • 您必须允许Project查看ABC的头文件,以便正确编译作为ABC的库(.a)文件,以便正确链接。

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