2012-05-23 11 views
42

Sto ricostruendo Android dal sorgente (per eseguire il flash su un dispositivo, in questo momento utilizzando l'emulatore), cercando di aggiungere un singolo strumento da riga di comando. Ho messo la mia fonte in repo/exernal/... e scritto Android.mk.android.mk arm-linux-androideabi-g ++ eccezioni e __cxa_allocate_exception

Ottengo i seguenti: non-definisce

__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 attraverso le altre questioni qui con gli stessi non-definisce, ma non riesco a sembrare trovare la soluzione per Android.

Il comando finale collegamento viene generato come:

prebuilt/darwin-x86/toolchain/arm-linux-androideabi-4.4.x/bin/arm-linux-androideabi-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-androideabi-4.4.x/bin/../lib/gcc/arm-linux-androideabi/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) 

Chiunque può vedere un problema o indicarlo in una direzione per ottenere il comportamento corretto da Supporto, linux-androideabi-g ++?

+0

Sto avendo un problema simile. Prova a eseguire make con 'showcommands' per ottenere le linee di compilazione dettagliate. Nella mia vedo le mie "eccezioni" ma _also_ '-fno-exceptions' che è l'impostazione predefinita. Mi chiedo che abbia la precedenza o anche se questo ha qualcosa a che fare con il problema del collegamento. Probabilmente no. –

risposta

0

Tutti gli undefiniti provengono da libstdC++.

Accade spesso quando si hanno diverse versioni di libstdC++ e si compila con una determinata 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.

0

Mi sono imbattuto in __cxa simile a undefined indietro come risultato della creazione di un progetto che stava estraendo librerie/oggetti condivisi in cui alcuni APP_STL definiti: = gnustl_shared mentre altri hanno dichiarato gnustl_static nei loro file Application.mk.

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

1

considerazione la rimozione libstd ++ come statica in Android.mk dovrebbe default l'implementazione standard di Android e si dovrebbe andare bene

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

Rimuovere libstdC++ statico o dinamico. Se non lo fai, prova a rimuovere entrambi

Problemi correlati