Подтвердить что ты не робот

Android.mk arm-linux-androideabi-g++ исключения и __cxa_allocate_exception

Я перестраиваю Android из исходного кода (для запуска на устройство, прямо сейчас с использованием эмулятора), пытаясь добавить один инструмент командной строки. Я поставил свой источник в repo/exernal/... и написал Android.mk.

Я получаю следующие undefine:

__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

Я искал другие проблемы с такими же неопределенностями, но не могу найти решение для Android.

Последняя команда связи генерируется как:

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)

Может ли кто-нибудь увидеть проблему или указать мне направление, чтобы получить правильное поведение от arm-linux-androideabi-g++?

4b9b3361

Ответ 1

Рассмотрите возможность удаления libstd ++ как статического в Android.mk, он должен по умолчанию использовать стандартную реализацию Android, и вы должны быть в порядке

На самом деле, я вижу, вы добавили его как в статическую, так и в динамическую библиотеки.

Удалите статический libstdС++ или динамический. Если это не делает, попробуйте удалить оба

Ответ 2

Все ваши undefine из libstdС++.

Это часто случается, когда у вас есть разные версии libstdС++ и скомпилированы с определенной версией и связаны с другим, или забывайте связать.

Иногда это может даже произойти, если ссылка выполняется после библиотеки, которая в ней нуждается.

Ответ 3

Я столкнулся с аналогичным __cxa undefines некоторое время назад в результате создания проекта, который вытягивал библиотеки/общие объекты, где некоторые определенные APP_STL: = gnustl_shared, а другие объявили gnustl_static в своих файлах Application.mk.

Возможно, вы можете столкнуться с чем-то подобным? Если это так, я бы рекомендовал использовать один или другой в объединенном решении, но не оба.