2012-05-23 11 views
42

Ich rekonstruiere Android von der Quelle (um auf ein Gerät zu flashen, jetzt mit Emulator) und versuche, ein einzelnes Befehlszeilenprogramm hinzuzufügen. Ich habe meine Quelle in Repo/Exernal/... und geschrieben Android.mk.android.mk arm-linux-androidabi-g ++ Ausnahmen und __cxa_allocate_exception

ich folgende undefines:

__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 

ich durch die anderen Themen hier mit den gleichen undefines gesucht haben, kann aber nicht ganz scheinen die Lösung für Android zu finden.

wird Der letzte Link-Befehl erzeugt wird, wie:

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 ist:

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) 

Kann ein Problem oder zeigen Sie mir jemand in einer Richtung sehen das richtige Verhalten von arm- zu erhalten Linux-androideabi-g ++?

+0

zu entfernen. Ich habe ein ähnliches Problem. Versuchen Sie make mit 'showcommands' auszuführen, um die detaillierten Kompilierungszeilen zu erhalten. In meinem sehe ich meine "Fehler", aber auch "keine Ausnahmen", was der Standard ist. Ich frage mich, welches Vorrang hat oder ob dies etwas mit dem Linkage-Problem zu tun hat. Wahrscheinlich nicht. –

Antwort

0

Alle Ihre undefines stammen aus libstdC++.

Es passiert oft, wenn Sie verschiedene libstdC++ - Versionen haben und mit einer bestimmten Version kompilieren und eine Verknüpfung mit einer anderen herstellen oder die Verknüpfung vergessen.

Manchmal kann es sogar passieren, wenn die Verbindung nach einer Bibliothek erfolgt, die sie benötigt.

0

Ich lief in ähnlichen __cxa undefines eine Weile zurück als Ergebnis der Erstellung eines Projekts, das in Bibliotheken/gemeinsamen Objekten gezogen wurde, wo einige definiert APP_STL: = gnustl_shared während andere gnustl_static in ihren Application.mk-Dateien deklariert.

Vielleicht stoßen Sie auf etwas Ähnliches? Wenn ja, würde ich empfehlen, das eine oder das andere in der kombinierten Lösung zu verwenden, aber nicht beides.

1

Betrachten libstd ++ als statisch in Android.mk Entfernen es auf die Standard-Android-Implementierung in Verzug, und Sie sollen

Eigentlich, ich sehe dich hinzugefügt sowohl als statische als auch dynamische Bibliotheken in Ordnung sein.

Entfernen Sie entweder statische libstdC++ oder die dynamische. Wenn das nicht funktioniert, versuche beide