我目前有一个非常大的代码库的单个Xcode项目,我将其称为项目X,我将其分成一堆子项目(项目A ,B,C)。链接静态库,共享另一个静态库
到目前为止,这些项目中的每一个都自行编译就好了。他们都产生静态库。 项目B和项目C依赖于生成的静态库项目A为了构建。
我有另外一个xcode项目,项目ž,需要通过项目B和C产生的静态库。这就是问题所在。当项目Z进入链接器阶段时,事情就会爆炸 - 对于项目B和C,它们原先链接的代码在项目A中找到重复的符号!
我是很新,静态库的世界,我不能确定如何与项目ž前进,或如何修改其他项目,使他们链接对同一A计划 lib。我有一种感觉,这是不可能的。我在这里有什么选择?
编辑:
我要澄清的是项目B和项目C需要建设成单独的静态库,因为某些客户端将只需要一个或另一个。
另外,我在OSX和iOS平台上都遇到了这个困境。
我意识到我可以通过将项目构建为动态库来解决OSX上的这个问题。不过,我宁愿不这样做,它仍然让我在iOS上遇到同样的问题。
是的,你说得对。 我解决了这个问题,只是没有将项目B和项目C链接到项目A.项目B和C仍将项目A作为依赖项引用,因此它们能够很好地构建。由于客户将始终将项目A与这些项目并列在一起,因此所有符号都可以找到并且工作起来。 – Jeff 2012-08-01 19:28:19
@Jeff你是如何使A成为“依赖”的,这样其他人可以构建,而不是实际连接到(包括)A的构建中? – johnbakers 2016-04-30 13:39:24
@Rob我注意到,在Xcode中,如果我构建的静态库仅包含到另一个库的头,但没有链接到其他库的二进制文件,则构建完成。如果我用一个实际的程序项目(而不是一个库)来做这件事,那么在链接阶段有一些未定义的定义(错误)。我假设当你建立一个图书馆时,“跳过”链接阶段的这部分是正常的,而实际的程序在建立时会做额外的链接检查,是吗? (如果它被指示构建一个库,编译器实际上会做什么?) – johnbakers 2016-04-30 14:38:45