2013-08-14 15 views
5

Ho costruito una libreria in C++ che voglio includere nella mia applicazione Android utilizzando NDK. Tuttavia, la mia biblioteca deve utilizzare ICU4C. Ho cercato di compilare ICU per Android, e ho letto un sacco di domande qui su SO, ma non riesco ancora a far compilare ICU in file .a per Android. Non sono sicuro che il modo migliore per farlo. Qualcuno ha avuto successo con ICU con NDK?Include ICU nel progetto Android NDK

A proposito, speravo di utilizzare ICU 51.2, a meno che non ci sia un buon motivo per utilizzare una versione precedente.

risposta

2

È possibile costruire ICU come libreria statica android specificando queste bandiere nella tua Android.mk

LOCAL_CFLAGS := -DANDROID -fdata-sections -ffunction-sections 
LOCAL_CPPFLAGS := -DANDROID -frtti -fno-exceptions -fdata-sections -ffunction-sections 

Se si utilizza Android NDK senza eccezioni è necessario incidere i dispersi cxa_bad_typeid()

extern "C" std::type_info const& __cxa_bad_typeid() 
{ 
    // just return something 
    return typeid(void*); 
} 
+0

È il ' extern "C" 'per evitare il mangling del nome di' __cxa_bad_typeid'? Se sì, conosci un modo per risolvere l'avviso del linker: "__cxa_bad_typeid ha specificato C-linkage, ma restituisce un tipo definito dall'utente 'const std :: type_info &' che è incompatibile con C". Posso disattivare l'avviso, ma mi piacerebbe sapere se c'è un modo corretto per risolvere questo problema. – meowsqueak

+0

@meowsqueak Puoi usare 'void * __cxa_bad_typeid()' ma questo hack sarebbe anche peggio e non sicuro. –