常见错误处理

模型推理

  • 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