Sto cercando di utilizzare l'NDK 5 pieno C gnustl ++:Android NDK R5 e il supporto di C++ eccezione
I CPLUSPLUS-SUPPORT.html
stati:
La toolchain NDK supporta eccezioni C++, dal momento che NDK R5, ma tutti Le origini C++ sono compilate con il supporto -fno-exceptions per impostazione predefinita, per i motivi di compatibilità con le versioni precedenti.
Per abilitarlo, utilizzare il flag del compilatore C++ '-fexceptions'. Questo può essere fatto aggiungendo quanto segue a ogni definizione modulo nel Android.mk:
LOCAL_CPPFLAGS += -fexceptions
Più semplicemente, aggiungere una sola riga al vostro Application.mk, l'impostazione applicherà automaticamente a NDK di tutto il progetto moduli:
APP_CPPFLAGS += -fexceptions
sources/cxx-stl/gnu-libstdc++/README
Uniti:
Questa directory co conserva le intestazioni e i binari precompilati per l'implementazione della libreria di modelli standard C++ libstdC++ - v3 di GNU GNU.
Questi sono generati dalle origini della toolchain dallo script rebuild-all-prebuilt.sh in build/tools.
Per utilizzarlo, definire APP_STL su "gnustl_static" in Application.mk. Vedere i documenti/CPLUSPLUS-SUPPORT.html per ulteriori dettagli.
Questa implementazione supporta pienamente le eccezioni C++ e RTTI.
Ma tutti i tentativi che utilizzano eccezioni non riescono. Un NDK alternativo esiste su http://www.crystax.net/android/ndk-r4.php. L'utilizzo dell'esempio ciao-jni da quell'NDK non funziona. Compliation con NDK 5 opere dopo la creazione di un Application.xml
con
APP_STL := gnustl_static
Impostazione APP_STL a gnustl_static
anche abilita automaticamente -frtti
e -fexceptions
. Ma muore la stessa morte orribile dei miei esperimenti.
sono riuscito a ottenere un esempio minimo di codice che viene blocca per me:
try {
__android_log_write(ANDROID_LOG_DEBUG,"foobar","trhown!");
throw "Wrong object type.";
} catch (char* b) {
__android_log_write(ANDROID_LOG_DEBUG,"foobar","catched!");
}
Am che mi manca qualcosa o è l'affermazione nel README
e CPLUSPLUS-SUPPORT.html
semplicemente sbagliato?
Non hai detto che cosa il vostro fallimento è, quindi è difficile aiutare; Eccezioni, RTTI e static_gnustl funzionano per me su NDK-r5. – grrussel
Ho aggiunto un esempio che si blocca. – plaisthos
Richiamare il comando ndk_build con l'argomento V = 1 e vedrete i comandi dati per creare e collegare. Sei sicuro che l'arresto sia dovuto a delle eccezioni? – grrussel