我过去多次嵌套使用静态库,但从未像现在这样,这引起了一些问题。
现在先假设我有三个静态库:A、B和C。并且有一个项目使用它们,如下所示:
A是一个基础库,包含常用的自定义视图、数据结构和类别。B是与A链接的库,包含多个项目共享的视图控制器。C是另一个与A链接的库,包含多个项目共享的视图控制器。
这个特定的项目使用了来自B和C的代码。因此,结构如下:
由于 Xcode 静态库的链接方式基本上是合并它们,所以 B 和 C 都拥有 A 的所有符号。因此我遇到了重复符号链接器错误。我该如何处理呢?需要弱化某些链接吗?还是我缺少某个特定的标志?我需要设置除了链接二进制文件之外的其他依赖关系吗?
我已经在谷歌和这里搜索了很多好的信息,但没有找到能够适用于我的情况的。
更新想法:
所以让我问一下,既然静态库虽然可以合并,但实际上不应该这样做,那么是否应该将它们全部放入一个项目中,只需有多个静态库目标?甚至不使用目标依赖项,只有 A、AB 和 AC,以及 ABC 目标包含其目标所需的正确文件和标题?这无疑会使构建设置非常复杂,并可能使源代码分发有些复杂,但它将解决我的当前问题,可能是更好的处理方式。你觉得呢?
现在先假设我有三个静态库:A、B和C。并且有一个项目使用它们,如下所示:
A是一个基础库,包含常用的自定义视图、数据结构和类别。B是与A链接的库,包含多个项目共享的视图控制器。C是另一个与A链接的库,包含多个项目共享的视图控制器。
这个特定的项目使用了来自B和C的代码。因此,结构如下:
A
/ \
B C
\ /
Project
由于 Xcode 静态库的链接方式基本上是合并它们,所以 B 和 C 都拥有 A 的所有符号。因此我遇到了重复符号链接器错误。我该如何处理呢?需要弱化某些链接吗?还是我缺少某个特定的标志?我需要设置除了链接二进制文件之外的其他依赖关系吗?
我已经在谷歌和这里搜索了很多好的信息,但没有找到能够适用于我的情况的。
更新想法:
所以让我问一下,既然静态库虽然可以合并,但实际上不应该这样做,那么是否应该将它们全部放入一个项目中,只需有多个静态库目标?甚至不使用目标依赖项,只有 A、AB 和 AC,以及 ABC 目标包含其目标所需的正确文件和标题?这无疑会使构建设置非常复杂,并可能使源代码分发有些复杂,但它将解决我的当前问题,可能是更好的处理方式。你觉得呢?
B
和C
会包含A
的符号?这听起来一点都不对。 - trojanfoeB
是静态库,而A
也是静态库,则Project
必须链接到A
和B
。换句话说,在与二进制文件的最终链接之前,B
不包含A
。 - trojanfoe