dlopen失败:找不到符号" __ cxa_finalize"由" /system/lib/libdl.so&#34引用;

时间:2015-10-20 12:58:48

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

直到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

1 个答案:

答案 0 :(得分:2)

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

System.loadLibrary("dl");

位于您的代码中某处?如果是这样的话,我在6和6上运行的代码就是捕获并忽略6在尝试加载库时抛出的UnsatisfiedLinkError异常。