直到Android 6,我们有一个应用程序的工作版本,它使用Qt Android编写,从Nexus中的Android 6开始设备我们看到奇怪的错误dlopen失败:找不到符号“__cxa_finalize”引用“/system/lib/libdl.so”
dlopen failed: cannot locate symbol "__cxa_finalize" referenced by "/system/lib/libdl.so"
和应用程序崩溃。
objdump -T ourlibrary.so
...
00000000 DF *UND* 00000000 __cxa_finalize
...
以链接libc.so,忍不住了,没有它同样的问题-lc
标志测试。
其他依赖库,而建筑:libgnustl_shared.so
是为了骗取编译器我们已经增加了
extern "C" int __cxa_finalize(void*); // { empty body somewhere in .cpp file }
没有帮助,可能有人点到这个问题? 注:这是完全正常工作,直到Android的6(棉花糖)
UPD1: API版本android-9
,建筑arm
,QT的Android编译armv5
,工具链版本4.9
UPD2:一些其他的库显示的glibc版本
00000000 w DF *UND* 00000000 GLIBC_2.2.5 __cxa_finalize
我想补充一下,如果你没有这个明确的负载,但有崩溃,那么尽早加上** libdl **的显式负载,并且'try ... catch'这个异常。 –
删除'System.loadLibrary(“dl”)',它开始工作正常 – user1318496