android.mk arm-linux-androidabi-g ++ eccezioni e __cxa_allocate_exception

Sto ricostruendo Android dal sorgente (per eseguire il flash su un dispositivo, in questo momento usando l’emulatore), cercando di aggiungere un singolo strumento da riga di comando. Ho messo la mia fonte in repo / exernal / … e scritto Android.mk .

Ottengo il seguente undefined:

 __cxa_allocate_exception __cxa_begin_catch __cxa_end_catch __cxa_end_cleanup __cxa_free_exception __cxa_get_exception_ptr __cxa_rethrow __cxa_throw __gxx_personality_v0 

Ho cercato tra gli altri problemi qui con gli stessi undefines, ma non riesco a trovare la soluzione per Android.

Il comando di collegamento finale viene generato come:

 prebuilt/darwin-x86/toolchain/arm-linux-androidabi-4.4.x/bin/arm-linux-androidabi-g++ -nostdlib -Bdynamic -Wl,-T,build/core/armelf.x -Wl,-dynamic-linker,/system/bin/linker -Wl,--gc-sections -Wl,-z,nocopyreloc -o out/target/product/generic/obj/EXECUTABLES/wavsender_intermediates/LINKED/wavsender -Lout/target/product/generic/obj/lib -Wl,-rpath-link=out/target/product/generic/obj/lib -lc -llog -lcutils -lnetutils -lc -lstdc++ -lm out/target/product/generic/obj/lib/crtbegin_dynamic.o out/target/product/generic/obj/EXECUTABLES/wavsender_intermediates/ohSongcast/WavSender/WavSender.o out/target/product/generic/obj/STATIC_LIBRARIES/liblog_intermediates/liblog.a out/target/product/generic/obj/STATIC_LIBRARIES/libcutils_intermediates/libcutils.a out/target/product/generic/obj/STATIC_LIBRARIES/libopenhome_intermediates/libopenhome.a out/target/product/generic/obj/STATIC_LIBRARIES/libgtest_intermediates/libgtest.a out/target/product/generic/obj/STATIC_LIBRARIES/libstlport_static_intermediates/libstlport_static.a out/target/product/generic/obj/STATIC_LIBRARIES/libstdc++_intermediates/libstdc++.a out/target/product/generic/obj/STATIC_LIBRARIES/libgabi++_intermediates/libgabi++.a -Wl,-z,noexecstack -Wl,--icf=safe -Wl,--fix-cortex-a8 prebuilt/darwin-x86/toolchain/arm-linux-androidabi-4.4.x/bin/../lib/gcc/arm-linux-androidabi/4.4.3/armv7-a/libgcc.a out/target/product/generic/obj/lib/crtend_android.o 

Android.mk è:

 include $(CLEAR_VARS) LOCAL_MODULE := wavsender LOCAL_MODULE_TAGS := eng LOCAL_CFLAGS += -fexceptions -D_GNU_SOURCE -DPLATFORM_ANDROID LOCAL_SRC_FILES += WavSender.cpp LOCAL_SHARED_LIBRARIES := libc libcutils libnetutils LOCAL_STATIC_LIBRARIES := libcutils libopenhome LOCAL_STATIC_LIBRARIES += libopenhome libgtest libstlport_static libstdc++ libgabi++ LOCAL_LDLIBS += -lstdc++ include external/stlport/libstlport.mk include $(BUILD_EXECUTABLE) 

Qualcuno può vedere un problema o indicarmi una direzione per ottenere il comportamento corretto da arm-linux-androidabi-g ++?

Prendi in considerazione la possibilità di rimuovere libstd ++ come static in Android.mk e dovrebbe essere l’implementazione standard di Android e dovresti stare bene

In realtà, vedo che l’hai aggiunto sia come librerie statiche che dinamiche.

Rimuovi static libstdc ++ o dinamico. Se ciò non accade, prova a rimuoverli entrambi

Tutti i tuoi undefin sono da libstdc ++.

Accade spesso quando si hanno versioni libstdc ++ diverse e si compila con una certa versione e collegamento con un’altra o si dimentica di collegarsi.

A volte, può persino accadere se il collegamento viene eseguito dopo una libreria che ne ha bisogno.

Mi sono imbattuto in __cxa simile a undefined un po ‘indietro come risultato della costruzione di un progetto che stava estraendo librerie / oggetti condivisi dove alcuni definivano APP_STL: = gnustl_shared mentre altri dichiaravano gnustl_static nei loro file Application.mk.

Forse potresti incontrare qualcosa di simile? Se è così, ti consiglio di utilizzare l’uno o l’altro nella soluzione combinata, ma non entrambi.