android.mk arm-linux-androideabi-g++异常和__cxa_allocate_exception (注:这是一个提问标题,不需要回答)

42

我正在从源代码重新构建Android(用于刷写设备,目前使用模拟器),尝试添加一个单独的命令行工具。我已经将我的源代码放在repo / external / ...中,并编写了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”,但也有“-fno-exceptions”,这是默认设置。我想知道哪个优先级更高,甚至是否与链接问题有关。可能不是。 - J.Churchill
3个回答

1
考虑在Android.mk中将libstd++作为静态库移除,它应该默认使用标准的Android实现,这样就可以解决问题了。
实际上,我看到你已经将它添加为静态和动态库。
删除静态的libstdc++或动态库中的一个。如果这样做不起作用,请尝试将两者都删除。

0

我曾经遇到过类似的__cxa未定义错误,这是由于构建一个项目时引入了一些声明APP_STL := gnustl_shared的库/共享对象和一些在Application.mk文件中声明gnustl_static的库/共享对象。

也许你也遇到了类似的问题?如果是这样,我建议在组合解决方案中只使用其中一种,而不是两种都使用。


0

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

当你使用不同的libstdc++版本进行编译并链接到另一个版本,或者忘记链接时,这种情况经常发生。

有时,即使链接在需要它的库之后完成,这种情况也可能发生。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接