2015-10-20 110 views
1

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

回答

2

我看见runni同样的错误我的申请。你有:

System.loadLibrary("dl"); 

位于你的代码的地方?如果是这样,我在6和< 6上运行代码的做法是在尝试加载库时捕获并忽略由6抛出的UnsatisfiedLinkError异常。

+0

我想补充一下,如果你没有这个明确的负载,但有崩溃,那么尽早加上** libdl **的显式负载,并且'try ... catch'这个异常。 –

+0

删除'System.loadLibrary(“dl”)',它开始工作正常 – user1318496

相关问题