2012-03-01 11 views
6

Necesito usar GMP en un programa de iphone en el que estoy trabajando, pero realmente no sé por dónde empezar. Sé que tengo que crear una versión para el dispositivo y una versión para el simulador, pero eso es todo lo que sé. He intentado buscar pero no he podido encontrar mucho.Crear GMP para iOS

¿Alguien aquí ha compilado exitosamente GMP para iphone que desearía guiarome en el proceso?

Vi Building GMP for iOS pero no funciona para mí. pensé que había construido con éxito mediante:

./configure CC="/Developer/Platforms/iPhoneOS.platform/Developer/usr/llvm-gcc-4.2/bin/llvm-gcc-4.2" CXX="/Developer/Platforms/iPhoneOS.platform/Developer/usr/llvm-gcc-4.2/bin/llvm-g++-4.2" CPP="/Developer/Platforms/iPhoneOS.platform/Developer/usr/llvm-gcc-4.2/bin/llvm-gcc-4.2 -E" LD="$IOS/usr/bin/ld" CPPFLAGS="-arch armv7 -isysroot /Developer/Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS5.0.sdk -miphoneos-version-min=4.2" AR="$IOS/usr/bin/ar" NM="$IOS/usr/bin/nm" NMEDIT="$IOS/usr/bin/nmedit" LIBTOOL="$IOS/usr/bin/libtool" LIPO="$IOS/usr/bin/lipo" OTOOL="$IOS/usr/bin/otool" RANLIB="$IOS/usr/bin/ranlib" STRIP="$IOS/usr/bin/strip" --disable-shared --enable-static --prefix=$IOS/usr/local --host=none-apple-darwin10

luego hacer la instalación.

En /usr/local/lib tengo libgmp.a. Pero cuando me arrastre a que xcode cuando voy a compilarlo me dice:

ignoring file /Users/daniel/Desktop/libgmp.a, file was built for archive which is not the architecture being linked (armv7) (me cayó en mi escritorio, por alguna razón, entonces arrastrado a mi proyecto en Xcode)

Esto me está volviendo loco. ¿Alguien puede ayudar? Tenga en cuenta que soy un novato completo con estas herramientas.

Suponiendo que recibo ayuda y puedo hacer que esto funcione. ¿Cómo hago para convertirlo en un marco que funcione en un armv6, armv7 y simulator(i386)?

Gracias de antemano.

Dan

ACTUALIZACIÓN: En caso de cualquier otra persona tienen el problema aquí es cómo lo resolví.

  1. Primero compile en cruz GMP 3 veces, configurando las arquitecturas en armv6. armv7 e i386 respectivamente. Al construir las versiones de brazo, agregue la bandera -DNO_ASM a CPPFLAGS.

  2. Búsqueda LIPO los tres archivos .a juntos

  3. archivo .a importación a Xcode con gmp.g y gmpgxx.h.

  4. Done

+0

Lo descubrí. Ahora tengo una biblioteca GMP que funciona y que funciona para el simulador (i386) y los dispositivos (armv6 y armv7). Me pregunto si puedo usar la parte armv6/7 del desarrollo de Android con el NDK. Ahora, escribe un contenedor objetivo C para que funcione bien con NSString. – user1178964

+4

Puede (y debe) publicar una respuesta a su propia pregunta y aceptarla. –

Respuesta

6

Según lo sugerido por robar, voy a responder a mi pregunta y aceptar la respuesta. Soy nuevo en esto, así que si hay una manera más fácil de perdonarme, así es como logré hacerlo.

Para compilar GMP para iphone debe construir tres la biblioteca desde la línea de comando tres veces. Build para las arquitecturas armv6, armv7 e i386. Para garantizar que no haya problemas en xcode, asegúrese de agregar -DNO_ASM a CPPFLAGS. Una vez que tenga los tres archivos .a, léelos juntos en una sola biblioteca.

Ahora puede agregar la biblioteca que creó con lipo en xcode e incluir los encabezados, ahora tiene GMP trabajando para el desarrollo de iphone.

Espero que esto ayude. Pasé un par de días tratando de resolver esto.

+0

Gracias por la respuesta, pero ¿podría proporcionar un enlace para que las bibliotecas descargables? No puedo hacer nada para que funcione. ¡Gracias! – doozMen

+0

¿Cómo lograste que el paso de compilación cruzada funcionara para cualquiera de las arquitecturas? Cuando lo intento, obtengo el mismo problema que informaste originalmente. – hrabinowitz

+0

Al intentar realizar una compilación cruzada, siempre me quedo atascado con este error de configuración: "configure: error: Vaya, mp_limb_t es de 64 bits, pero el código de ensamblador en esta configuración espera 32 bits". – hrabinowitz

0

Puede inspirarse en este bash script para OpenSSL y adaptarlo para GMP. Utiliza el script estándar configure y sustituye CC y CFLAGS mediante perl.

Cuestiones relacionadas