2011-12-04 25 views
6

Sto utilizzando open-ssl source data a https://github.com/eighthave/openssl-android per creare una libreria che può essere utilizzata nel progetto Android.Costruisci libreria Android-openssl per piattaforma 2.1

Come da istruzioni fornite a README.txt, sono in grado di compilarlo per la versione della piattaforma Android 2.2 (livello -8)

Ma la mia applicazione richiede che sia 2.1 (livello -7) compatibile.

ho provato le seguenti opzioni con il file default.properties (https://github.com/eighthave/openssl-android/blob/master/default.properties)

1) impostare target = Android-7

2) impostare target = Android-5

Ma quando compilo che usando il comando NDK-build, dà errore seguente

Compile thumb : crypto <= dsa_vrf.c 
    Compile thumb : crypto <= dso_dl.c 
    Compile thumb : crypto <= dso_dlfcn.c 
    /Crypto/openssl-android/crypto/dso/dso_dlfcn.c: In function 'dlfcn_pathbyaddr': 
    /Crypto/openssl-android/crypto/dso/dso_dlfcn.c:445: error: 'Dl_info' undeclared (first use in this function) 
    /Crypto/openssl-android/crypto/dso/dso_dlfcn.c:445: error: (Each undeclared identifier is reported only once 
    /Crypto/openssl-android/crypto/dso/dso_dlfcn.c:445: error: for each function it appears in.) 
    /Crypto/openssl-android/crypto/dso/dso_dlfcn.c:445: error: expected ';' before 'dli' 
    /Crypto/openssl-android/crypto/dso/dso_dlfcn.c:455: error: 'dli' undeclared (first use in this function) 
    make: *** [obj/local/armeabi/objs/crypto/dso/dso_dlfcn.o] Error 1 

Come per errore messaggio-Dl_info non è definito. ma se andiamo al file dso_dlfcn.c, la definizione per la struttura è già fornita. (https://github.com/eighthave/openssl-android/blob/master/crypto/dso/dso_dlfcn.c)

E questo codice è stato compilato per target = android-8 nel file di proprietà predefinito, ma non per android-7 o android-5.

Richiedi di aiutarmi a risolvere questo errore. e fammi sapere che cosa è necessario fare tutti i cambiamenti per compilarlo per la piattaforma Android 2.1.

Grazie in anticipo.

+0

È anche avere [OpenSSL e Android] (https: // wiki.openssl.org/index.php/Android) sul wiki OpenSSL. – jww

risposta

6

cercare di includere il seguente pezzo di codice in dso_dlfcn.c:

typedef struct { 
const char *dli_fname; /* Pathname of shared object that 
          contains address */ 
void  *dli_fbase; /* Address at which shared object 
          is loaded */ 
const char *dli_sname; /* Name of nearest symbol with address 
          lower than addr */ 
void  *dli_saddr; /* Exact address of symbol named 
          in dli_sname */ 
} Dl_info; 
int dladdr(const void *addr, Dl_info *info) { return 0; } 

Prima:

#ifdef __linux 
# ifndef _GNU_SOURCE 
# define _GNU_SOURCE /* make sure dladdr is declared */ 
# endif 
#endif 

Dopo che nel mio caso è costruita la biblioteca.

+0

Grazie, la libreria è stata creata con successo. – Sushil

+0

Prego! In bocca al lupo! – Yury

+0

Questo problema esiste ancora .. !! Ma la soluzione suggerita da @Yuri mi ha salvato .. Grazie :) –

0

Provare ad installare con la versione più recente di NDK e aggiornare il file Application.mk in modo appropriato.

LOCAL_PATH := $(call my-dir) 
APP_PLATFORM := android-19 
NDK_TOOLCHAIN_VERSION := clang 
APP_ABI := armeabi-v7a 
APP_STL := gnustl_static 
APP_CPPFLAGS += -frtti 
APP_CPPFLAGS += -fexceptions 
APP_CPPFLAGS += -DANDROID 
APP_PROJECT_PATH := $(shell pwd) 
APP_BUILD_SCRIPT := $(LOCAL_PATH)/../Android.mk 

I suddetti 2 problemi verranno risolti.

0

Ho avuto un problema con la soluzione di @Yuri e ho dovuto migliorarlo. Il mio APP_ABI è impostato su all in Application.mk. Nel mio caso ha significato che tra armeabi e armeabi-v7a sto costruendo anche per x86 e mips. Ho anche il target android-9 installato in Android SDK da utilizzare in altri progetti. x86 e mips sono supportati da ndk a partire da android-9. Come scritto nei documenti, quando ndk-build inizierà a costruire questi obiettivi, passerà automaticamente alla destinazione android-9. E cosa? - Sì, non riuscirà a compilare :-). Ecco la mia soluzione:

  1. In crypto/Android.mk trovare la riga local_c_flags := -DNO_WINDOWS_BRAINDEATH. Dopo la riga scrivi questo http://pastebin.com/7euUVD7A.
  2. codice di Yuri deve essere inserito in if defined: http://pastebin.com/V58gTSBU
  3. A proposito, ho inserito il blocco dello Yuri dopo #include <openssl/dso.h> ma non prima #ifdef __linux
Problemi correlati