Tengo un proyecto que no es de ARC que utiliza una biblioteca estática habilitada para ARC. Este es un escenario admitido, para que todo funcione bien. Es decir, hasta que ejecute el código en un dispositivo 4.x, incluido el simulador. En ese caso, el código explota con el siguiente error de vinculador:Biblioteca estática con compatibilidad ARC vinculada a un proyecto que no es ARC y que provoca errores de enlazador
dyld: lazy symbol binding failed: Symbol not found: _objc_storeStrong
Referenced from: /Users/zoul/Library/Application Support/iPhone Simulator/4.3.2/Applications/…/Demo.app/Demo
Expected in: /Developer/Platforms/iPhoneSimulator.platform/Developer/SDKs/iPhoneSimulator4.3.sdk/System/Library/Frameworks/Foundation.framework/Foundation
Esto sucede tan pronto como una parte del código ARC habilitado intenta llamar _objc_storeStrong
función, como en un método init
(self = [super init]
). La conversión del proyecto principal a ARC resuelve el problema, pero me gustaría saber si hay otras soluciones.
¿Está enlazando usando LLVM que es compatible con ARC? – Krizz
primero: la cadena de herramientas probablemente acaba de agregar una biblioteca para vincular cuando ARC está habilitado por el proyecto principal. si no puede ubicarlo en las transcripciones, entonces puede vincularlo al compilar una fuente con ARC. – justin
¡Es una gran idea, @Justin! El truco con un solo archivo habilitado para ARC no funcionó, pero logré encontrar el argumento correcto para que el enlazador incluyera la biblioteca y parece funcionar. ¿Puedes complacer eso como una respuesta? Un simple hará, lo editaré para agregar los detalles. – zoul