Cuando vincule estática-biblioteca, el vinculador incrustará todos los símbolos en su binario final. (Es por eso que se llama static.) En realidad, no hay una buena manera de quitarse símbolos específicos, porque no hay diferencia entre los símbolos fuente y los símbolos recién incorporados. Incluso puedes quitar símbolos duplicados, nadie puede estar seguro de que los símbolos duplicados sean la misma versión. Si una biblioteca usó una versión modificada de la biblioteca JSONKit
, se romperá cuando la reemplace con otra versión.
La única forma es obtener el archivo .a
sin los símbolos duplicados u obtener la fuente y compilarlos usted mismo. Si los creadores de lib no son idiotas, deberían ofrecer alguna versión de biblioteca sin símbolos incrustados. Si no existe tal cosa, recomiendo no usar esa lib. Porque no tiene ninguna preocupación por el conflicto de símbolos que significa hecho por un novato real, lo que significa que está lleno de problemas.
Si obtiene el código fuente, simplemente edítelo para que incluya JSONKit usted mismo y elimínelo de las fuentes del marco. Si solo obtiene bibliotecas estáticas, escriba a los responsables de mantenimiento y dígales que establezca un vínculo débil con JSONKit y que sea un requisito para utilizar su marco (esto es lo que deberían hacer de todos modos). –
Sí, este es un gran problema. He visto bibliotecas que faltan a propósito otras terceras partes requeridas porque saben que entrarán en conflicto. Si está utilizando -ObjC -all_load, supongo que está utilizando archivos .a reales. Tal vez puedas solicitar a los escritores una versión sin esa biblioteca. – rooster117
Sí, temía que esta fuera la resolución. Ojalá fuera más fácil evitar este conjunto de problemas. – MrShoot