42

我正在从源代码重建 Android(以闪存到设备上,现在使用模拟器),试图添加一个命令行工具。我已经把我的源代码放在 repo/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

我在这里搜索了具有相同未定义的其他问题,但似乎无法找到适用于 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++ 获得正确行为的方向?

4

3 回答 3

1

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

实际上,我看到您将它添加为静态库和动态库。

删除静态 libstdc++ 或动态的。如果不这样做,请尝试同时删除

于 2016-02-29T22:12:35.423 回答
0

您所有的未定义都来自 libstdc++。

当您有不同的 libstdc++ 版本并使用某个版本编译并与另一个版本链接或忘记链接时,通常会发生这种情况。

有时,如果链接是在需要它的库之后完成的,它甚至会发生。

于 2014-02-21T09:10:25.773 回答
0

由于构建了一个正在拉入库/共享对象的项目,其中一些定义了 APP_STL := gnustl_shared 而其他人在其 Application.mk 文件中声明了 gnustl_static,我不久前遇到了类似的 __cxa undefines。

也许你可能会遇到类似的事情?如果是这样,我建议在组合解决方案中使用一种或另一种,但不要同时使用两者。

于 2014-06-04T19:10:55.813 回答