【问题标题】:android.mk arm-linux-androideabi-g++ exceptions and __cxa_allocate_exceptionandroid.mk arm-linux-androideabi-g++ 异常和 __cxa_allocate_exception
【发布时间】:2012-05-30 08:20:39
【问题描述】:

我正在从源代码重建 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++ 获得正确行为的方向?

【问题讨论】:

  • 我遇到了类似的问题。尝试使用“showcommands”运行 make 以获取详细的编译行。在我的中,我看到了我的“-fexceptions”,但 also '-fno-exceptions' 这是默认设置。我想知道哪个优先,或者即使这与链接问题有关。可能不会。

标签: android exception


【解决方案1】:

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

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

删除静态 libstdc++ 或动态 libstdc++。如果还是不行,请尝试删除两者

【讨论】:

    【解决方案2】:

    不久前,我在构建一个提取库/共享对象的项目时遇到了类似的 __cxa undefines,其中一些定义了 APP_STL := gnustl_shared,而另一些则在其 Application.mk 文件中声明了 gnustl_static。

    也许您会遇到类似的情况?如果是这样,我建议在组合解决方案中使用其中一种,但不要同时使用。

    【讨论】:

      【解决方案3】:

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

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

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

      【讨论】:

        猜你喜欢
        • 2015-02-16
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2014-05-09
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多