【问题标题】:dlopen failed: cannot locate symbol "__cxa_finalize" referenced by "/system/lib/libdl.so"dlopen 失败:找不到“/system/lib/libdl.so”引用的符号“__cxa_finalize”
【发布时间】:2015-10-20 12:58:47
【问题描述】:

在 Android 6 之前,我们有一个使用 Qt Android 编写的应用程序的工作版本,从 Nexus 设备中的 Android 6 开始,我们看到奇怪的错误

dlopen failed: cannot locate symbol "__cxa_finalize" referenced by "/system/lib/libdl.so"

应用程序崩溃。

objdump -T ourlibrary.so
...
00000000      DF *UND*  00000000 __cxa_finalize
...

使用-lc 标志测试以链接libc.so,没有同样的问题,无法提供帮助。

构建时的其他依赖库:libgnustl_shared.so

为了欺骗编译器,我们添加了

extern "C" int __cxa_finalize(void*); // { empty body somewhere in .cpp file }

没有帮助,有人可以指出问题吗? 注意:这在 Android 6 (Marshmallow) 之前一直有效

UPD1: api版本android-9,架构arm,qt android编译armv5,工具链版本4.9

UPD2:其他一些库正在显示 glibc 版本

00000000 w DF *UND* 00000000 GLIBC_2.2.5 __cxa_finalize

【问题讨论】:

    标签: android c++ qt android-ndk cross-compiling


    【解决方案1】:

    我在运行我的应用程序时看到了同样的错误。你有:

    System.loadLibrary("dl");
    

    位于您的代码中的某个地方?如果是这样,我为了让我的代码在 6 和

    【讨论】:

    • 我想补充一下,如果你没有这个显式加载,但是有崩溃,那么早点添加这个 libdl 的显式加载,try … catch 这个异常.
    • 删除了System.loadLibrary("dl"),它开始正常工作
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-06-14
    • 2021-02-21
    • 1970-01-01
    相关资源
    最近更新 更多