android.mk arm-linux-androideabi-g ++exception和__cxa_allocate_exception

我正在从源重buildAndroid(现在使用模拟器闪存到设备上),尝试添加一个命令行工具。 我已经把我的来源回购/ exernal / …和书面Android.mk

我得到以下的定义:

 __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 

我已经通过相同的undefinessearch了其他问题,但似乎无法findAndroid的解决scheme。

最终的链接命令生成为:

 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 ++得到正确的行为吗?

考虑在Android.mk中将libstd ++移除为静态,它应该默认为标准的Android实现,你应该没问题

其实,我看到你把它作为一个静态和dynamic库join。

删除静态libstdc ++或dynamic的。 如果不这样做,尝试删除两个

你所有的定义都来自libstdc ++。

当你有不同的libstdc ++版本,并且编译某个版本并与另一个版本链接时,经常会发生,或者忘记链接。

有时候,如果链接是在一个需要它的库之后完成的,甚至会发生这种情况。

由于构build了一个项目,导致库中/共享对象的某些定义为APP_STL:= gnustl_shared,而另一些项目在其Application.mk文件中声明了gnustl_static,所以我遇到了类似的__cxa。

也许你可能会碰到类似的东西? 如果是这样,我build议在组合的解决scheme中使用一个或另一个,但不是两个。