2008-12-07 27 views
16

Hay una biblioteca de código abierto que me gustaría usar para mi aplicación de iPhone. La biblioteca está escrita en C y compila con Makefiles. Me gustaría usar una biblioteca estática.Crear una biblioteca estática para iPhone

Si agrego el archivo .a a mis dependencias de proyecto, funciona bien con el simulador, pero no se vincula al apuntar al SDK de iPhone (sin duda porque el archivo .a se compila para una plataforma Intel).

¿Qué indicadores del compilador GCC debo usar para compilar una biblioteca estática para el SDK de iPhone? Pensé que la opción '-arch' me proporcionaría una arquitectura de iPhone, pero no tuve suerte.

Cualquier ayuda sería apreciada.

Respuesta

3

Intente compilar con brazo-manzana-darwin-gcc como su aplicación GCC. Luego puede usar lipo para fusionar las 2 bibliotecas estáticas (brazo y 386) juntas para que el desarrollo en el simulador versus el dispositivo sea uniforme.

+0

Gracias por la información. Todavía estoy tratando de hacer que la biblioteca compile con arc-apple-darwin-gcc ... –

1

Después de varios intentos de utilizar el brazo GCC compilador con las puntas proporcionadas here, me rendí. En mi caso, es mucho más simple simplemente portar la biblioteca a XCode que tratar de compilar una biblioteca estática para el iPhone.

6

Para biblioteca basada autoconf, votaría por escritura de la estructura de Christopher Stawarz:

http://pseudogreen.org/blog/build_autoconfed_libs_for_iphone.html

Con este script, puede automatizar todo el proceso con solo comando, y fácilmente llegar a los binarios de biblioteca para diferentes plataformas, como iPhoneOS 2.0/2.1/2.2/2.2.1 y iPhoneSimulator 2.0/2.1/2.2/2.2.1.

Sin embargo, debido a the change of Xcode 3.1, la configuración de compilación $ (SDKROOT) se había convertido en algunos nombres cortos como "macosx10.5", "iphoneos2.2.1" o "iphonesimulator2.2.1". Por lo tanto, la forma en que mencionó en el artículo sobre cómo establecer la ruta de búsqueda en Xcode para la biblioteca y el encabezado no funcionará (en Xcode 3.1). Necesitarás codificar el camino por tu cuenta.

+2

¿Alguien tiene una respuesta más reciente a este problema? – Alper

1

Simplemente compílelo normalmente usando el s86 x86 (simulador de iphone) luego usando la plataforma para arm/ios (arm-xxx-xxx) luego combine ambas libs estáticas en .a usando "LIPO" (herramienta de línea de comandos)) Funciona bien y es más simple que reinventar la rueda (al menos para esas libs más pequeñas) ... lo hice con liblo y libdmtx y no tengo ningún problema y me tomó como 10 minutos hacer ambas cosas ... :-)

Cuestiones relacionadas