2013-08-14 6 views
5

Ich habe eine Bibliothek in C++ erstellt, die ich in meine Android-Anwendung mit dem NDK aufnehmen möchte. Allerdings muss meine Bibliothek ICU4C verwenden. Ich habe versucht, ICU für Android zu kompilieren, und ich habe viele Fragen hier auf SO, aber ich bin immer noch nicht in der Lage, ICU in .a-Dateien für Android kompiliert zu bekommen. Ich bin mir nicht sicher, der beste Weg, dies zu tun. Hat jemand Erfolg auf der Intensivstation mit dem NDK gehabt?Include ICU in Android NDK Projekt

Übrigens hatte ich gehofft, ICU 51.2 zu verwenden, es sei denn, es gibt einen guten Grund, eine ältere Version zu verwenden.

Antwort

2

Sie ICU als Android statische Bibliothek erstellen können, indem Sie diese Flags Angabe in Ihrem Android.mk

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

Wenn Sie Android NDK nutzen, ohne Ausnahmen müssen Sie die fehlende cxa_bad_typeid()

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

Ist das 'hacken extern "C" 'zu vermeiden Namensmangel von' __cxa_bad_typeid'? Wenn ja, kennen Sie einen Weg, die Linker-Warnung zu lösen: "__cxa_bad_typeid hat C-Verknüpfung angegeben, aber gibt einen benutzerdefinierten Typ 'const std :: type_info &' zurück, der nicht mit C kompatibel ist". Ich kann die Warnung deaktivieren, aber ich würde gerne wissen, ob es einen richtigen Weg gibt, um das zu beheben. – meowsqueak

+0

@meowsqueak Sie können 'void * __cxa_bad_typeid()' verwenden, aber dieser Hack wäre noch schlimmer und typsicher. –