我目前有一个非常大的代码库的Xcode项目,我称之为Project X,我将其划分为一堆子项目(项目A,B,C).
到目前为止,这些项目中的每一个都可以自行编译.它们都产生静态库.项目B和项目C依赖于项目A生成的静态库以进行构建.
我有另一个xcode项目,Project Z,它需要Projects B和C生成的静态库.这就是问题所在.当Project Z进入链接器阶段时,事情就会爆发 - 在项目B和C的库中找到重复的符号,用于它们最初在项目A中链接的代码!
我对静态库世界很陌生,我不确定如何推进Project Z,或者如何修改其他项目以便它们链接到同一个Project A lib.我觉得这是不可能的.我有什么选择?
编辑:
我应该澄清,项目B和项目C需要构建成单独的静态库,因为一些客户端只需要一个或另一个.
此外,我在OSX和iOS平台上都遇到了这种困境.
我意识到我可以通过将项目构建为动态库来解决OSX上的这个问题.但是,我不想这样做,它仍然让我在iOS上遇到同样的问题.
我一直在尝试为应用程序开发构建一组可重用的库,但我开始遇到问题.
我的一个静态库是一组通用方法(Objective-C Foundation类的类别,以提高它们的可用性),我倾向于在每个项目中使用它们.(我们称之为Lib A ...即XCode项目A生成libProjectA.a)
然后我有其他静态库,包含数学专用代码的东西等(我们称之为Lib B.)Lib B链接到Lib A,因为它需要使用一些通用功能.(即XCode项目B与libProjectA.a链接并生成libProjectB.a)
在我的XCode项目中,我希望包含并依赖于Lib A,因为它具有我一直使用的一般用途.我还想包含并依赖Lib B,因为我需要专门的数学功能.(即我的应用程序Project想要与libProjectA.a和libProjectB.a链接)
但是,当我尝试构建我的XCode项目时,我得到重复符号的错误,因为Lib A中定义的符号也在Lib B中定义.
ld: duplicate symbol _OBJC_METACLASS_$_Foo in /Users/kenny/xcode_build/Release-iphonesimulator/lib_ApplicationCore.a(Foo.o) and /Users/kenny/xcode_build/Release-iphonesimulator/lib_SpecializedMath.a(Foo.o)
Run Code Online (Sandbox Code Playgroud)
我怎样才能解决这个问题?我想开发可重用的库来加速我的应用程序开发,并通过经过测试/改进的代码来提高稳定性.我是从错误的角度来看待这个吗?我正在为iOS开发,所以我不能使用dylib,它们必须是静态的.
如果我们的项目彼此相互依赖并避免重复的符号,我如何将这些库包含在我的项目中?