常见错误处理
模型推理
Android 运行崩溃并提示 std::bad_cast
在Android环境下,程序运行过程中抛出如下异常并崩溃:
libc++abi: terminating due to uncaught exception of type std::bad_cast: std::bad_cast
原因:
该异常的根本原因在于同一进程空间内共存了两个ABI不兼容的 C++ 标准库(STL)实例,导致 C++ 运行时特性失效。
应用侧依赖:
libtcim_runtime_lite.so采用NDK编译,动态链接至NDK自带的libc++_shared.so。系统侧依赖:
libhal_xh2a.so作为系统组件,强制依赖Android系统内置的/system/lib64/libc++.so。
触发场景:
该问题通常发生在系统级应用或厂商预装应用中,应用层使用NDK编译,且配置为
APP_STL := c++_shared。系统层加载了依赖系统原生C++ 运行时的库,如libhal_xh2a.so。解决方法:
方法一:统一使用系统动态库 libc++.so
该方法强制NDK代码直接引用系统
libc++.so,不再将libc++_shared.so打包进APK。该方式确保全栈仅存在一个libc++.so实例,从根源消除冲突。方法二:创建软链接实现库重定向
该方法通过创建软链接
libc++_shared.so指向系统的libc++.so,强制诱导链接器加载系统原生STL实例,实现进程内STL唯一化。操作示例如下:在Android端,
houmo-tcim-runtime-xh2/lib目录下,执行下面指令:rm libc++_shared.so cp /system/lib64/libc++.so libc++_shared.so