所以我过去曾多次嵌套静态库,但从来没有像这样,这会引起一些问题。
现在让我们假设我有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目标?毫无疑问,这对于构建设置来说相当复杂,并且可能使源代码分发有点复杂,但它可以解决我当前的问题,并且可能是处理事情的更好方法。怎么想?
答案 0 :(得分:2)
看起来您没有正确创建静态库B
和C
,因为您包含来自静态库A
的目标文件。这是不正确的。相反,让A
,B
和C
只包含自己的类的目标文件,并将它们全部放在Project
二进制文件的最后一个链接中。
您必须允许B
查看A
的头文件才能正确编译。
您必须允许C
查看A
的头文件才能正确编译。
您必须允许Project
查看A
,B
和C
的头文件,以便正确编译作为A
,B
和C
的库(.a
)文件,以便正确链接。
我认为一旦正确设置项目依赖项,Xcode Workspace将为您处理所有的头/库搜索路径设置,但我可能错了,你可能需要自己设置这些路径。