Costruire una libreria nativa con il braccio Android di toolchain autonomo

Peterdk 12/22/2011. 2 answers, 5.509 views
android android android-ndk android-ndk cross-compiling toolchain

Sto cercando di costruire libraw come libreria condivisa Android. Sembra che la lib sia troppo complessa da utilizzare con Android.mk ecc, o meglio: non sono ancora in grado di farlo.

Ho provato il percorso dell'utilizzo di una toolchain indipendente da NDK, ma mi sto bloccando durante la compilazione di questa libreria.

Questo è il percorso che seguo per compilare la lib. Per favore, fai notare se sto facendo errori evidenti:

  1. Ho scaricato il ndk.
  2. ran: make-standalone-toolchain.sh
  3. Aggiunta la cartella bin di quella toolchain autonoma come primo elemento nel mio PATH .
  4. Ran ./configure con --host=arm-linux-androideabi . Questo è riuscito
  5. Ran make , qui si è schiantato molto velocemente.
      LibRaw-0.14.4 $ make      depbase = `echo internal / dcraw_common.lo |  sed 's | [^ /] * $ | .deps / & |; s | \ .lo $ ||' `; \          / bin / bash ./libtool --tag = CXX --mode = compila arm-linux-androideabi-g ++ -DPACKAGE_NAME = \ "LibRaw \" -DPACKAGE_TARNAME = \ "libraw \" -DPACKAGE_VERSION = \ "0.14.4 \" -DPACKAGE_STRING = \ "LibRaw \ 0.14.4 \" -DPACKAGE_BUGREPORT = \ "info@libraw.org \" -DPACKAGE_URL = \ "http: //www.libraw.org \" -DSTDC_HEADERS = 1 -DHAVE_SYS_TYPES_H = 1 -DHAVE_SYS_STAT_H = 1 -DHAVE_STDLIB_H = 1 -DHAVE_STRING_H = 1 -DHAVE_MEMORY_H = 1 -DHAVE_STRINGS_H = 1 -DHAVE_INTTYPES_H = 1 -DHAVE_STDINT_H = 1 -DHAVE_UNISTD_H = 1 -DHAVE_DLFCN_H = 1 -DLT_OBJDIR = \ ". Libs / \" -I.  -I / usr / local / include -g -O2 -MT internal / dcraw_common.lo -MD -MP -MF $ depbase.Tpo -c -o internal / dcraw_common.lo internal / dcraw_common.cpp && \          mv -f $ depbase.Tpo $ depbase.Plo      libtool: compila: arm-linux-androideabi-g ++ -DPACKAGE_NAME = \ "LibRaw \" -DPACKAGE_TARNAME = \ "libraw \" -DPACKAGE_VERSION = \ "0.14.4 \" "-DPACKAGE_STRING = \" LibRaw 0.14.4 \ "" -DPACKAGE_BUGREPORT = \ "info@libraw.org \" -DPACKAGE_URL = \ "http: //www.libraw.org \" -DSTDC_HEADERS = 1 -DHAVE_SYS_TYPES_H = 1 -DHAVE_SYS_STAT_H = 1 -DHAVE_STDLIB_H = 1 -DHAVE_STRING_H = 1 -DHAVE_MEMORY_H = 1 -DHAVE_STRINGS_H = 1 -DHAVE_INTTYPES_H = 1 -DHAVE_STDINT_H = 1 -DHAVE_UNISTD_H = 1 -DHAVE_DLFCN_H = 1 -DLT_OBJDIR = \ ". Libs / \" -I.  -I / usr / local / include -g -O2 -MT internal / dcraw_common.lo -MD -MP -MF internal / .deps / dcraw_common.Tpo -c internal / dcraw_common.cpp -fPIC -DPIC -o interno / .libs /dcraw_common.o      internal / dcraw_common.cpp: nella funzione membro 'void LibRaw :: read_shorts (ushort *, int)':      internal / dcraw_common.cpp: 119: errore: "swab" non è stato dichiarato in questo ambito      internal / dcraw_common.cpp: nella funzione membro 'void LibRaw :: write_ppm_tiff ()':      internal / dcraw_common.cpp: 9235: errore: "swab" non è stato dichiarato in questo ambito      make: *** [internal / dcraw_common.lo] Errore 1 

Dubito che questo messaggio di errore sia utile qui in StackOverflow, ma mi chiedo se avrei dovuto applicare qualche flag o configurazione aggiuntivi per farlo funzionare?

Nota che sono in grado di compilare questa libreria con successo solo se compilo per il mio sistema senza crosscompiling. (linux 32 bit).

Quando sto cercando un'istruzione per costruire GDAL per Android ( qui ), usa un'impostazione aggiuntiva di LIBS="-lsupc++ -lstdc++" . Questo collega le eccezioni STL e C ++? Tuttavia, quando li ho impostati prima di eseguire il mio configure ricevo immediatamente errori come:

  configure: 3018: controlla se il compilatore C ++ funziona  configure: 3040: arm-linux-androideabi-g ++ conftest.cpp -lsupc ++ -lstdc ++> & 5  /tmp/android-chain/bin/../lib/gcc/arm-linux-androideabi/4.4.3/../../../../arm-linux-androideabi/bin/ld: impossibile trovare -lsupc ++  collect2: ld ha restituito 1 stato di uscita 

Quindi, sono un po 'bloccato. Qualcuno un'idea?

2 Answers


Peterdk 01/09/2012.

Ho dovuto aggiungere un'implementazione della funzione di swab , dal momento che NDK non ha quella. Successivamente questo ha compilato bene (ma ho usato il Crystax ndk).

Un modo migliore per utilizzare toolwise è usare semplicemente un file Android.mk e usare ndk-build per compilarlo.

5 comments
asloob 06/07/2013
Ciao @Peterdk puoi dirmi dove hai ottenuto l'implementazione della funzione di scansione? o l'hai scritto tu stesso?
Peterdk 06/07/2013
Ciao, penso di aver cercato su Google. Non l'ho scritto da solo Forse anche combinato con una ricerca di Crystax.
asloob 06/08/2013
Grazie! L'ho trovato.
Peterdk 06/08/2013
Ciao, per favore aggiungi qui un link per altri utenti. :)
asloob 06/10/2013
Ecco il link swab.cpp

Andrey Kamaev 12/24/2011.

L'errore del linker dalla parte inferiore della domanda si verifica perché make-standalone-toolchain.sh da NDK r7 crea toolchain incompleta (mancano alcune librerie tra cui libsupc++.a ). Vi consiglio di provare a creare una toolchain da una delle versioni precedenti di NDK (r6b dovrebbe andare bene).

Related questions

Hot questions

Language

Popular Tags