Xcode: haz que force_load funcione con rutas relativas

Algunas bibliotecas requieren el indicador del enlazador -toda_carga cuando se vincula a un proyecto de Xcode. Sin embargo, esto genera un error de vinculador si existen conflictos de símbolos entre las bibliotecas. La solución es usar -force_load, que de hecho le permite usar -all_load en algunas bibliotecas, pero no en otras.

Sin embargo, esto a su vez conduce a un nuevo problema, al menos para mí. Siempre que uso -force_load con una ruta relativa a una biblioteca, el enlazador siempre encuentra conflictos de símbolos entre la biblioteca y él mismo. Parece que el vinculador piensa que la biblioteca con su ruta absoluta y la biblioteca con su ruta relativa son bibliotecas diferentes y, por lo tanto, encuentra conflictos entre la biblioteca y ella misma.

Puedo evitar esto usando una ruta absoluta con la bandera. Pero esta no es una solución maravillosa, ya que es conveniente mantener el código fuente para las bibliotecas dentro de mi directorio de documentos. Pero la ruta al directorio de documentos será diferente en otras máquinas.

Pregunta: ¿Alguien puede obtener force_load para trabajar con una ruta relativa a la biblioteca?

EDITAR: para obtener información general, vea esta pregunta

Con Xcode 4, si incluye el proyecto de la biblioteca en su proyecto de aplicación, puede agregarlo a las otras banderas del enlazador:

 -force_load $(BUILT_PRODUCTS_DIR)/ 

Todavía necesita la dependencia, y necesita agregar la biblioteca en la lista de Fase de Enlace de frameworks y bibliotecas también.

EDITAR: Apple ahora dice que a partir de alguna versión de Xcode 4 puede simplemente usar esta bandera del enlazador: “-ObjC” para obtener bibliotecas con categorías para cargar correctamente. Esa bandera está funcionando bien para mí en Xcode 5. La gente sigue votando esta respuesta, pero sospecho que la bandera -ObjC es la mejor solución ahora.

Esto funcionó para mí. Al igual que las respuestas anteriores, aún necesita incluir la biblioteca en el proyecto.

 -force_load $(SRCROOT)/pathToLibraryFromProject/libname.a 

Para la ruta, solo las carpetas de su proyecto conducen al lugar donde coloca su biblioteca, por ejemplo BaseFoler / Subfolder / libName.a.