2012-03-01 13 views
6

Devo usare GMP in un programma per iPhone su cui sto lavorando, ma non so da dove iniziare. So che devo costruire una versione per il dispositivo e una versione per il simulatore, ma questo è quanto so. Ho provato a guardarmi intorno ma non sono riuscito a trovare molto.Genera GMP per iOS

Qualcuno qui ha creato con successo GMP per iphone che avrebbe avuto cura di guidarmi durante il processo?

Ho visto Building GMP for iOS ma non funziona per me. ho pensato che avevo costruito con successo:

./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

Poi make install.

In /usr/local/lib Ho libgmp.a. Ma quando mi trascino a al xcode quando vado a compilarlo mi dice:

ignoring file /Users/daniel/Desktop/libgmp.a, file was built for archive which is not the architecture being linked (armv7) (ho lasciato nel mio desktop per qualche ragione, poi trascinato a nel mio progetto Xcode)

Questo mi sta facendo impazzire. Qualcuno può aiutare? Tieni presente che sono un noob completo che usa questi strumenti.

Supponendo di ricevere aiuto e posso farlo funzionare. Come faccio a trasformarlo in un framework che funzionerà su un armv6, armv7 e simulator(i386)?

Grazie in anticipo.

Dan

AGGIORNAMENTO: Se qualcuno altro ha il problema ecco come ho risolto.

  1. Primo cross compilare GMP 3 volte, impostando le architetture su armv6. armv7 e i386 rispettivamente. Quando si creano le versioni del braccio aggiungere il flag -DNO_ASM a CPPFLAGS.

  2. Trova LIPO i tre file .a insieme

  3. di file .a Importa per XCode con gmp.g e gmpgxx.h.

  4. Done

+0

L'ho capito. Ora ho una libreria GMP funzionante che funziona con il simulatore (i386) e i dispositivi (armv6 e armv7). Mi chiedo se posso usare la parte armv6/7 dello sviluppo Android con NDK. Ora scrivi un wrapper oggettivo c per renderlo piacevole con NSString. – user1178964

+4

È possibile (e dovrebbe) pubblicare una risposta alla propria domanda e accettarla. –

risposta

6

Come suggerito da Rob, io rispondere alla mia domanda e accettare la risposta. Sono nuovo a questo, quindi se c'è un modo più semplice perdonami, è così che sono riuscito a farlo.

Per creare GMP per iphone, è necessario creare tre la libreria dalla riga di comando tre volte. Crea per le architetture armv6, armv7 e i386. Per garantire che non vi siano problemi in xcode, assicurati di aggiungere -DNO_ASM a CPPFLAGS. Una volta che hai i tre file .a, li metti insieme in un'unica libreria.

È ora possibile aggiungere la libreria creata con lipo in xcode e includere le intestazioni, ora GMP funziona per lo sviluppo di iphone.

Spero che questo aiuti. Ho passato un paio di giorni cercando di capirlo.

+0

Grazie per la risposta, ma potresti fornire un link per le librerie donwloadable? Non riesco a cucire per farlo funzionare. Grazie! – doozMen

+0

Come hai ottenuto il passaggio cross-compile per lavorare su una qualsiasi delle architetture? Quando ci provo, ho lo stesso problema che hai originariamente riportato. – hrabinowitz

+0

Quando provo a eseguire la compilazione incrociata, rimango sempre bloccato con questo errore di configurazione: "configure: error: Oops, mp_limb_t è 64 bit, ma il codice assembler in questa configurazione prevede 32 bit." – hrabinowitz

0

Si può essere ispirati da questo bash script per OpenSSL e adattarlo per GMP. Utilizza lo script standard configure e sostituisce CC e CFLAGS utilizzando perl.