直到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
答案 0 :(得分:2)
我在运行应用程序时看到了同样的错误。你有:
System.loadLibrary("dl");
位于您的代码中某处?如果是这样的话,我在6和6上运行的代码就是捕获并忽略6在尝试加载库时抛出的UnsatisfiedLinkError异常。