2012-05-23 16 views
42

Estoy reconstruyendo Android desde la fuente (para flashear en un dispositivo, ahora mismo usando el emulador), tratando de agregar una sola herramienta de línea de comando. Puse mi fuente en repo/exernal/... y escribí Android.mk.android.mk excepciones de arm-linux-androideabi-g ++ y __cxa_allocate_exception

me sale el siguiente: 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 

He buscado a través de las otras cuestiones aquí con las mismas undefines, pero no puede parecer bastante para encontrar la solución para Android.

El último comando de enlace se genera como:

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

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) 

Puede alguien ver un problema o me punto en una dirección para conseguir el comportamiento correcto del brazo- linux-androideabi-g ++?

+0

Tengo un problema similar. Intenta ejecutar make con 'showcommands' para obtener las líneas de compilación detalladas. En el mío veo mis '-fexcepciones' pero _also_ '-fno-excepciones' que es el predeterminado. Me pregunto cuál tiene prioridad o si esto tiene algo que ver con el problema de vinculación. Probablemente no. –

Respuesta

0

Todas sus undefines son de libstdC++.

Suele suceder cuando tiene diferentes versiones de libstdC++ y compila con una cierta versión y enlaza con otra u olvida enlace.

A veces, incluso puede suceder si el enlace se realiza después de una biblioteca que lo necesita.

0

me encontré con undefines __cxa similares hace un tiempo atrás como consecuencia de la construcción de un proyecto que tiraba en las bibliotecas/objetos compartidos donde algunos APP_STL definido: = gnustl_shared mientras que otros declararon gnustl_static en sus archivos Application.mk.

¿Quizás te encuentres con algo similar? Si es así, recomendaría usar uno u otro en la solución combinada, pero no ambos.

1

considerar la eliminación de libstd ++ como estática en Android.mk debe por defecto la aplicación estándar de Android y que debe estar bien

En realidad, veo que ha añadido que tanto como bibliotecas estáticas y dinámicas.

Elimina la libstdC++ estática o la dinámica. Si eso no funciona, intente eliminar ambos