2015-09-22 10 views
16

Quando ho provato a compilare il mio progetto XCode con OpenCV 2.4 iOS utilizzando XCode 7 + iOS SDK 9, XCode lamentato del fatto checome compilare OpenCV iOS con ENABLE_BITCODE

ld: 'opencv2.framework/opencv2(alloc.o)' does not contain bitcode. You must rebuild it with bitcode enabled (Xcode setting ENABLE_BITCODE), obtain an updated library from the vendor, or disable bitcode for this target. for architecture arm64

clang: error: linker command failed with exit code 1 (use -v to see invocation)

e rifiutato di collegare. Dopo un po 'su Google, è turns out perché Apple ha aggiunto una nuova funzionalità denominata Bitcode per l'ottimizzazione delle app all'interno dell'App Store. Mentre il binario OpenCV iOS non è stato aggiornato per includere Bitcode, non può passare la fase di collegamento.

Alcuni reference hanno indicato una soluzione temporanea per disabilitare ENABLE_BITCODE in modo che il collegamento potesse essere eseguito senza Bitcode. Ciò impedirà la compilazione dell'app per Apple Watch perché il Bitcode è obbligatorio per le app di controllo. Quindi la mia domanda è, ci sono alcuni (i migliori facili) modi per compilare iOS OpenCV con Bitcode abilitato? (meglio con un link di download per framework compilato)

risposta

18

Dopo alcune ricerche e prove, ho trovato un modo per compilare OpenCV iOS dalla sorgente con Bitcode. Un binario compilato viene inoltre fornito qui: [v3.0][v2.4]. [Disclaimer: non sono responsabile per l'integrità del file binario compilato. Utilizzare a proprio rischio.]

I passaggi della compilazione sono fondamentalmente gli stessi di official document, con un solo passaggio aggiuntivo.

  1. Scarica il codice con git:

    cd ~/<my_working_directory>

    git clone https://github.com/Itseez/opencv.git

  2. Fai collegamento simbolico per Xcode lasciare OpenCV costruire script trovano il compilatore, file header ecc

    cd /

    sudo ln -s /Applications/Xcode.app/Contents/Developer Developer

  3. [Passo Premere il tasto] modificare lo script di compilazione per aggiungere l'opzione extra per codice binario che: modificare ~/<my_working_directory>/opencv/platform/ios/build_framework.py, e individuare la riga contenente -DCMAKE_C_FLAGS. Aggiungere una bandiera di -fembed-bitcode. Ad esempio, nel codice che ho ottenuto, che è la linea 55, e sarà simile

    "-DCMAKE_C_FLAGS=\"-Wno-implicit-function-declaration -fembed-bitcode\" " +

    dopo il cambiamento. [ref]

  4. Corporatura OpenCV quadro:

    cd ~/<my_working_directory>

    python opencv/platforms/ios/build_framework.py ios

    Se sta bene tutto, dopo pochi minuti si otterrà ~/<my_working_directory>/ios/opencv2.framework. Puoi aggiungere questo framework ai tuoi progetti Xcode.

P.S. Fai una domanda, anche quando sai già che la risposta è incoraggiata in base allo this post su Meta Stackchange.

+2

Ho trovato che la nuova versione di opencv (versione 3.1) ha già il flag codice -fembed-bit nel file build_framwork.py – CSawy

+0

@CSstudent Grazie per l'avviso! – grapeot

+0

@grapeot Ho seguito gli stessi passaggi ma ho affrontato i problemi come passo 4. Gentilmente aiutatemi. Posso mostrarti i log ma stanno superando il limite di caratteri. Quindi non posso postare qui. –

7

OpenCV è esattamente il tipo di software (insieme a codec audio e video) che probabilmente avrà ottimizzazioni ARM NEON arrotolate a mano. Il documentation suggerisce che ~ 40 funzioni hanno avuto questo trattamento in OpenCV3.0.

Se si compila per codice bit LLVM, si otterranno invece le versioni generiche (meno ottimizzate, implementate in C o C++).

L'uso di Bitcode è facoltativo, tranne durante la compilazione per Apple Watch, dove è difficile immaginare di eseguire comunque l'elaborazione di immagini computazionalmente complessa. Se stai aggregando un'app di controllo, sostituisci solo le impostazioni di generazione per il codice bit.

Problemi correlati