Il file è universale (tre sezioni), ma non contiene un errore di fetta (n) ARMv7 per le librerie statiche su iOS, comunque da bypassare?


403

Ho aggiornato la versione di Xcode e quando utilizzo le librerie statiche esterne, ricevo questo messaggio:

ld: il file è universale (3 sezioni) ma non contiene una fetta (n) armv7s: / file / location per l'architettura armv7s clang: errore: comando linker non riuscito con il codice di uscita 1 (usare -v per vedere l'invocazione)

C'è un modo per aggirare questo e aggiungere supporto alla libreria se lo sviluppatore della libreria non ha ancora aggiornato la propria libreria?


Questa sembra essere una buona soluzione per ora - galloway.me.uk/2012/09/hacking-up-an-armv7s-library
Rajavanya Subramaniyan

Risposte:


418

Se si desidera rimuovere il supporto per qualsiasi architettura, ad esempio ARMv7-s nel proprio caso, utilizzare il menu Progetto -> Impostazioni di costruzione -> rimuovere l'architettura da "architetture valide".

Puoi usarlo come soluzione temporanea fino a quando la libreria non è stata aggiornata. Devi rimuovere l'architettura dal tuo progetto principale, non dalla libreria.

In alternativa, è possibile impostare il flag per "Costruisci solo architettura attiva" della configurazione di debug su Sì. Lascia la configurazione della versione di rilascio "Solo architettura attiva attiva" su No, solo così riceverai un promemoria prima di rilasciare che dovresti aggiornare tutte le librerie di terze parti che stai utilizzando.


11
non è necessario ricompilare la libreria. puoi rimuovere questo flag dal progetto che sta usando la libreria.
Nicholas,

4
Funzionerà, poiché anche le vecchie app che non sono state compilate con il supporto armv7s devono funzionare. Ma perderai alcune ottimizzazioni specifiche. Questo dovrebbe essere comunque una soluzione temporanea.
Nicholas,

2
Il framework Dropbox è stato aggiornato per questo problema, consultare il forum.dropbox.com/topic.php?id=90014
railwayparade,

6
Rimuovere armv7s dall'elenco Valid Architectures ha funzionato per me, tuttavia lo ha fatto anche rimuoverlo da Architectures. In entrambi i casi, tuttavia, otterrei No architectures to compile for (ARCHS=i386, VALID_ARCHS=armv7).dal linker che potrei risolvere solo aggiungendo i386all'elenco Valid Architectures.
levigroker,

6
No, armv7s è il set di istruzioni del processore A6 utilizzato in iPhone 5. Poiché A6 è retrocompatibile, eseguirà comunque il set di istruzioni armv7.
Nicholas,

191

Ho semplicemente attivato "Costruisci solo architettura attiva" su "Sì" nelle impostazioni di creazione del target, e ora è OK!


1
@ Blasco73 Sai anche che sei fantastico? Dovresti. Ecco, signore, siete fantastici!
Thandasoru il

15
Come può essere una buona soluzione? Rimuove l'errore, ma ottieni solo build per l'arco corrente, non tutti sul mercato ...
esbenr

27

Prova a rimuovere armv7s dall '"Architettura valida" del progetto per rilasciare questo problema per il telefono iOS 5.1


13

Ho appena pubblicato una correzione qui che si applicherebbe anche in questo caso - fondamentalmente, fai una ricerca esadecimale nella tua libreria esterna per far pensare che sia il codice ARMv7s. Dovresti essere in grado di usarlo lipoper suddividerlo in 3 librerie statiche, duplicare / modificare quello ARMv7, quindi liporiutilizzarlo per assemblare una nuova libreria per tutte e 4 le architetture.


5

Flurry Support per iPhone 5 (ARMv7s) Come ho già detto nel post di ieri, Flurry ha iniziato a lavorare su una versione dell'SDK iOS per supportare il processore ARMv7s nel nuovo iPhone 5 immediatamente dopo l'annuncio di mercoledì.

Sono felice di dirti che il lavoro è terminato e l'SDK è ora disponibile sul sito.


4

utilizzare il menu Progetto -> Impostazioni build ->

quindi rimuovere armv7s dalle "architetture valide". Se è stato scelto lo standard, eliminalo e aggiungi armv7.


1

Nel caso ciò accada a qualcuno. Ho creato la mia libreria da utilizzare con un codice di terze parti. Mentre lo stavo costruendo per consegnarlo, ho accidentalmente lasciato il mio iPhone 4S collegato, quindi Xcode ha creato la mia libreria solo per l'architettura collegata invece di seguire le impostazioni del progetto. Rimuovi tutti i dispositivi collegati e ricostruisci la libreria, collegala e dovresti andare bene.

Spero che sia d'aiuto.


0

Nel mio caso, mi stavo collegando a una libreria di terze parti un po 'vecchia (sviluppata per iOS 6, su XCode 5 / iOS 7). Pertanto, ho dovuto aggiornare la libreria di terze parti, eseguire un Clean and Build e ora viene compilata correttamente.

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.