2012-03-07 11 views
9

Ho un'applicazione pubblicata che supporta sia amrv6 che armv7. Ora ho un aggiornamento che è compatibile solo con armv7 (ho aggiunto una libreria esterna che dipende da armv7). Quando provo a inviare l'app al negozio, viene visualizzato l'errore detailed inCompilazione condizionale per armv6 e armv7

Capisco l'errore precedente e ho bisogno di cambiare la mia app in modo che supporti entrambe le architetture. Il mio problema è che il mio codice dipende da una libreria che è compatibile solo con armv7. Se cambio le proprietà del mio progetto per supportare sia armv6 che armv7 ottengo un errore di compilazione (dettagli sotto). Devo essere in grado di compilare il codice con il supporto per entrambe le architetture: compila armv7 usando la libreria I dipende da armv6 ha un codice diverso che non dipende dalla libreria.

Come posso ottenere questo risultato?

Dettagli errore:

• the compile crash is in one Lib file (.a) and the error says : ld: warning: directory not found for option '-L/Developer/Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS5.0.sdk/usr/lib/gcc/arm-apple-darwin10/4.0.1' ld: in /Users/.../(lib file).a, file is universal but does not contain a(n) armv6 slice for architecture armv6 Command /Developer/Platforms/iPhoneOS.platform/Developer/usr/bin/llvm-gcc-4.2 failed with exit code 1

Grazie in anticipo

+3

È possibile taggare la domanda con iOS e xcode. È più una domanda su come produrre binari universali con questa toolchain piuttosto che una questione di rolling del proprio dispatcher dipendente dall'architettura nell'assembly ARM. –

risposta

4

Beh ho realizzato il mio ultimo risultato in non quello corretto ... Apple ha detto che è impossibile ma questo non è proprio vero ... grazie a Jim, cerco po 'di più e ho trovato un modo per farlo ..

  1. Rimuovere lib da "Fasi di costruzione"
  2. Aggiungere entrambe le architetture in "Altre Bandiere Linker" (Build Settings), per questo è necessario fare clic nella + e aggiungere ARMv6 e ARMv7
  3. Aggiungere il lib in ARMv7 .. con -l
  4. Non dimenticare #if defined _ARM_ARCH_7 nel codice

Questo è come ha risposto Jim ma più dettagliato.

1

Nelle tue impostazioni di generazione, se si passa sopra un ambiente, un + sembra che è possibile fare clic su per campo di applicazione di un'impostazione per una particolare architettura. Dovrai rimuovere la libreria dalla normale lista di librerie e aggiungerla inserendo l'argomento -L manualmente solo per armv7. Probabilmente dovrai anche aggiungere una definizione del preprocessore in modo da poter inserire #ifdef s attorno al codice che chiama la libreria.

Modifica: Pensandoci, potresti essere in grado di farlo in un modo più semplice contrassegnando la libreria come facoltativa nella sezione delle fasi di compilazione.

+1

Grazie! ma non capisco dove/cosa sia "rimuovere la libreria dalla normale lista di librerie", ho modificato "Percorsi di ricerca libreria" e "Altre bandiere linker", con '+' creo due righe con armv6 e armv7. Ma ora ho un nuovo errore ed i dettagli dicono "..non ho trovato l (lib) .a" ... Qualcosa sta chiamando il Lib .. taccio tutte le prove nel codice e anche "opzionale" nella sezione delle fasi di costruzione ... quindi probabilmente ho bisogno di rimuoverlo nella "lista normale" come hai detto tu. – silvaric

+0

Ti ho dato due alternative. Non dovresti provare a fare entrambe le cose contemporaneamente. – Jim

2

ho ricevuto questa risposta da parte di Apple:

Non si può condizionale creare l'app sia per ARMv6 e ARMv7. La tua libreria statica deve essere compilata per armv6 e armv7 poiché l'applicazione supporta entrambe queste architetture ... È possibile eliminare il supporto per armv6 impostando il target di distribuzione iOS su 4.3 o versioni successive.

Fondamentalmente ho bisogno di chiedere allo sviluppatore della biblioteca di costruire per tutti e due lì architetture (= /) o ho impostato il mio obiettivo minimo di 4.3 e solo ARMv7

0

Mi dispiace, ho incollato la cosa sbagliata dagli appunti.

volevo dire:

è sufficiente rimuovere la cattiva architettura Architetture valide in target Aguilar Impostazioni e siete pronti per partire :)

0

Ho avuto lo stesso Problema così ho acceso: "Build Attiva Architettura Solo "per sì (in target -> Crea Impostazioni"

Questo funziona ... per ora

immagino la mia applicazione non funziona su un iPhone 5, ma dovrà aspettare fino al. fornitore della libreria statica che sto usando build s it for armv7/armv7s

0

Ho riscontrato questo problema per l'SDK iOS di Google Analytics. La semplice sostituzione della libreria con l'ultima versione è ciò che ha risolto questo problema.