我一直在尝试为应用程序开发构建一组可重用的库,但我开始遇到问题。重复的符号:在静态库B中包含静态库A,在XCode项目中也包含库A和B
我的一个静态库是一套通用的方法(Objective-C基础类的类别来提高它的可用性),我倾向于在每个项目中使用它们。 (我们将其称为Lib A ...即XCode项目A生成libProjectA.a)
然后我有其他静态库,包含专门的数学代码等等(我们称它为Lib B. )Lib B链接到Lib A,因为它需要使用一些通用功能。 (即XCode项目B与libProjectA.a链接并生成libProjectB.a)
在我的XCode项目中,我想包含并依赖于Lib A,因为它具有我一直使用的一般用途。我也想包含并依赖于Lib B,因为我需要这种专门的数学功能。 (即我的应用程序项目想要链接libProjectA.a和libProjectB.a)
但是,当我尝试构建我的XCode项目时,我得到重复符号的错误,因为Lib A中定义的符号也被定义在库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)
我该如何解决这个问题?我想开发可重用的库来加速我的应用程序开发,并通过测试/改进的代码提高稳定性。我是否从错误的角度来看待这个问题?我正在为iOS开发,因此我不能使用dylib,它们必须是静态的。
如何将这些库包含在我的项目中,当它们相互依赖并避免重复的符号?
对于项目B而言,尽管您听起来有多奇怪,但与Lib A链接并不合适。如果他们是动态库,那很好,但它们是静态库,即目标文件的存档,仅此而已。通过“链接”反对库A,您正在指示归档程序从库A中获取所有对象,并将它们添加到项目B中的所有对象中。 – Troubadour 2011-03-09 23:01:14