He estado tratando de crear un conjunto de bibliotecas reutilizables para el desarrollo de aplicaciones, pero estoy empezando a encontrarme con un problema.Símbolo duplicado: Incluir la lib estática en B estática, también incluir lib A y B en el Proyecto XCode
Una de mis bibliotecas estáticas es un conjunto de métodos de uso general (categorías en Objective-C Foundation clases para mejorar su usabilidad) que tiendo a usar en cada proyecto. (Lo llamaremos Lib A ... es decir, el proyecto A de XCode produce libProjectA.a)
Luego tengo otras bibliotecas estáticas, cosas que contienen código especializado para matemáticas, etc. (Lo llamaremos Lib B.) Lib B se vincula a Lib A porque necesita usar parte de esa funcionalidad general. (es decir, el proyecto XCode enlaces B con libProjectA.a y produce libProjectB.a)
En mi proyecto XCode, quiero incluir y depender de Lib A porque tengo mis cosas de uso general que utilizo todo el tiempo. También quiero incluir y depender de Lib B porque necesito esa funcionalidad matemática especializada. (es decir, mi aplicación Proyecto quiere vincular con libProjectA.a y libProjectB.a)
Sin embargo, cuando intento construir mi proyecto XCode recibo errores para los símbolos duplicados, porque los símbolos que están definidos en Lib A también se definen en 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)
¿Cómo puedo solucionar este problema? Deseo desarrollar bibliotecas reutilizables para acelerar el desarrollo de mi aplicación y aumentar la estabilidad a través de un código probado/refinado. ¿Me estoy acercando a esto desde una perspectiva equivocada? Estoy desarrollando para iOS, así que no puedo usar dylibs, deben ser estáticos.
¿Cómo puedo incluir estas bibliotecas en mi proyecto cuando son interdependientes entre sí y evitar los símbolos duplicados?
No tiene sentido que el proyecto B se vincule con Lib A a pesar de lo extraño que le parezca. Si fueran bibliotecas dinámicas, está bien, pero son bibliotecas estáticas, es decir, archivos de archivos de objeto, nada más. Al "enlazar" contra lib A está ordenando al archivador que tome todos los objetos de lib A y los agregue a todos los objetos del proyecto B. – Troubadour