una script rutas ruta relativas relativa qué ejemplos directorios absolutas absoluta iphone xcode ios linker static-libraries

iphone - script - Xcode-hace que force_load funcione con rutas relativas



rutas absolutas y relativas linux ejemplos (2)

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

-force_load $(BUILT_PRODUCTS_DIR)/<library_name.a>

Aún necesita la dependencia, y también necesita agregar la biblioteca a la lista de marcos y bibliotecas de la Fase de enlace.

EDITAR: Apple ahora dice desde una versión de Xcode 4 que simplemente puede usar este indicador de vinculador: "-ObjC" para que las bibliotecas con categorías se carguen correctamente. Esa bandera funciona bien para mí en Xcode 5. La gente todavía está votando esta respuesta, pero sospecho que la bandera -ObjC es la mejor solución ahora.

Algunas bibliotecas requieren el indicador de vinculador -all_load al vincular a un proyecto de Xcode. Sin embargo, esto conduce a un error de vinculador si hay conflictos de símbolos entre las bibliotecas. La solución es usar -force_load, que efectivamente 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 ella misma. Parece que el enlazador 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 de las bibliotecas dentro de mi directorio de documentos. Pero la ruta al directorio de documentos será diferente en otras máquinas.

Pregunta: ¿Puede alguien hacer que force_load trabaje con una ruta relativa a la biblioteca?

EDITAR: para información de fondo, vea esta pregunta


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

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

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