2013-08-14 21 views
5

Zbudowałem bibliotekę w C++, którą chcę dołączyć do mojej aplikacji Android za pomocą NDK. Jednak moja biblioteka musi używać ICU4C. Próbowałem skompilować ICU dla Androida, i patrzyłem na wiele pytań tutaj na SO, ale wciąż nie jestem w stanie uzyskać ICU skompilowany do plików .a dla Androida. Nie jestem pewien, jak najlepiej to zrobić. Czy ktoś miał sukces z OIOM z NDK?Włącz ICU w Android NDK Project

Nawiasem mówiąc, miałem nadzieję korzystać z ICU 51.2, chyba że istnieje dobry powód, aby użyć starszej wersji.

Odpowiedz

2

Można budować ICU jak Android statycznej biblioteki, określając te flagi w swojej Android.mk

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

Jeśli używasz Android NDK bez wyjątków trzeba będzie siekać brakującą cxa_bad_typeid()

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

Czy ' extern "C" ', aby uniknąć zniekształcania nazw' __cxa_bad_typeid'? Jeśli tak, czy znasz sposób rozwiązania ostrzeżenia linkera: "__cxa_bad_typeid ma określone C-link, ale zwraca zdefiniowany przez użytkownika typ" const std :: type_info & ", który jest niezgodny z C". Mogę wyłączyć ostrzeżenie, ale chciałbym się dowiedzieć, czy istnieje odpowiedni sposób, aby to naprawić. – meowsqueak

+0

@meowsqueak Możesz użyć 'void * __cxa_bad_typeid()' ale to hack byłoby jeszcze gorsze i niebezpieczne. –