2011-12-22 10 views
5

Sto provando a creare 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.Creazione di una libreria nativa con toolchain autonomo Android arm

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

Questo è il percorso che prendo per compilare la lib. Si prega di notare se sto facendo errori evidenti:

  1. ho scaricato il NDK.
  2. corse: make-standalone-toolchain.sh
  3. Aggiunto cartella bin di quel toolchain standalone come prima voce nella mia PATH.
  4. Ran ./configure con --host=arm-linux-androideabi. Questo è riuscito
  5. Ran make, qui si è bloccato molto velocemente.
 
    LibRaw-0.14.4$ make 
    depbase=`echo internal/dcraw_common.lo | sed 's|[^/]*$|.deps/&|;s|\.lo$||'`;\ 
     /bin/bash ./libtool --tag=CXX --mode=compile arm-linux-androideabi-g++ -DPACKAGE_NAME=\"LibRaw\" -DPACKAGE_TARNAME=\"libraw\" -DPACKAGE_VERSION=\"0.14.4\" -DPACKAGE_STRING=\"LibRaw\ 0.14.4\" -DPACKAGE_BUGREPORT=\"[email protected]\" -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: compile: arm-linux-androideabi-g++ -DPACKAGE_NAME=\"LibRaw\" -DPACKAGE_TARNAME=\"libraw\" -DPACKAGE_VERSION=\"0.14.4\" "-DPACKAGE_STRING=\"LibRaw 0.14.4\"" -DPACKAGE_BUGREPORT=\"[email protected]\" -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 internal/.libs/dcraw_common.o 
    internal/dcraw_common.cpp: In member function 'void LibRaw::read_shorts(ushort*, int)': 
    internal/dcraw_common.cpp:119: error: 'swab' was not declared in this scope 
    internal/dcraw_common.cpp: In member function 'void LibRaw::write_ppm_tiff()': 
    internal/dcraw_common.cpp:9235: error: 'swab' was not declared in this scope 
    make: *** [internal/dcraw_common.lo] Error 1 

dubito che questo messaggio di errore è disponibile qui a StackOverflow, ma io sono rimasto chiedendo se avrei applicato alcune bandiere o di configurazione aggiuntive per ottenere questo lavoro?

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

Quando si cerca un'istruzione per la creazione di GDAL per Android (here), viene utilizzata un'impostazione aggiuntiva di LIBS="-lsupc++ -lstdc++". Questo collega le eccezioni STL e C++? Tuttavia, quando ho impostato quelli prima di eseguire il mio configure ottengo subito gli errori come:

 
configure:3018: checking whether the C++ compiler works 
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: cannot find -lsupc++ 
collect2: ld returned 1 exit status 

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

risposta

4

Ho dovuto aggiungere un'implementazione della funzione swab, poiché NDK non ha quella. Successivamente questa ammenda compilata (ma ho usato il crystax ndk).

Un modo migliore per gli strumenti era utilizzare solo un file Android.mk e utilizzare ndk-build per compilarlo.

+0

Ciao @Peterdk puoi dirmi dove hai ottenuto l'implementazione della funzione di scansione? o l'hai scritto tu stesso? – asloob

+0

Ciao, penso di aver cercato su Google. Non l'ho scritto da solo Forse anche combinato con una ricerca di Crystax. – Peterdk

+0

Grazie! L'ho trovato. – asloob

2

Errore linker dalla parte inferiore della domanda 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).

Problemi correlati