xcode - 复杂的静态库链接

标签 xcode linker static-libraries

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

现在让我们假设我有 3 个静态库,A、B 和 C。一个项目按如下方式使用它们。

A是由常用的Custom Views、Data structures、Categories组成的基础库。 B 是与 A 链接的库,其中包含在多个项目之间共享的 View Controller 。 C 是另一个与 A 链接的库,其中包含在多个项目之间共享的 View Controller 。

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

   A
  / \
 B   C
  \ /
Project

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

我在这里进行了谷歌搜索,发现了很多有用的信息,但我无法将任何信息扭曲到这种特殊情况中。

思想更新

所以让我问这个,因为在阅读静态库之后这似乎是一个可能的解决方案,但实际上不应该这样。

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

最佳答案

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

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

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

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

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

关于xcode - 复杂的静态库链接,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14445909/

相关文章:

ios - 调试时是否可以查看iOS应用程序沙箱中的文件内容?

c++ - Codelite MinGW G++ 链接器错误

c++ - g++ 链接错误 : 'undefined reference to ' main'

c++ - 静态库中的"Conditional jump or move depends on uninitialised value"

ios - 如何让应用程序在测试设备上运行

xcode - 在 XCode 中突出显示//TODO

c++ - visual studio 2012 professional 中的 gmp.h/mpir.h 链接器

c - 如何在C程序中使用静态pthread库(Visual Studio 2008)?

ubuntu - 如何将 glibc 作为静态库获取?

ios - 所有框架和静态库文件都编译成app?