dlopen 失败:无法找到“/system/lib/libdl.so”引用的符号“__cxa_finalize”
dlopen failed: cannot locate symbol "__cxa_finalize" referenced by "/system/lib/libdl.so"
在 Android 6 之前,我们有一个应用程序的工作版本,它是使用 Qt Android 编写的,从 Android 6 开始,在 Nexus 设备中我们看到了奇怪的错误
dlopen failed: cannot locate symbol "__cxa_finalize" referenced by "/system/lib/libdl.so"
应用程序崩溃。
objdump -T ourlibrary.so
...
00000000 DF *UND* 00000000 __cxa_finalize
...
为了 link libc.so 使用 -lc
标记进行了测试,没有它同样的问题。
构建时的其他依赖库:libgnustl_shared.so
为了欺骗编译器我们添加了
extern "C" int __cxa_finalize(void*); // { empty body somewhere in .cpp file }
没有帮助,有人可以指出问题所在吗?
注意:这在 Android 6 (Marshmallow)
之前一直有效
UPD1:api版本android-9
、架构arm
、qtandroid编译armv5
、工具链版本 4.9
UPD2: 一些其他库显示 glibc 版本
00000000 w DF *UND* 00000000 GLIBC_2.2.5 __cxa_finalize
我在 运行我的应用程序中看到了同样的错误。你有:
System.loadLibrary("dl");
位于您的代码中的某处?如果是这样,我在 6 和 <6 上使我的代码 运行 所做的就是捕获并忽略 6 在尝试加载库时抛出的 UnsatisfiedLinkError 异常。
在 Android 6 之前,我们有一个应用程序的工作版本,它是使用 Qt Android 编写的,从 Android 6 开始,在 Nexus 设备中我们看到了奇怪的错误
dlopen failed: cannot locate symbol "__cxa_finalize" referenced by "/system/lib/libdl.so"
应用程序崩溃。
objdump -T ourlibrary.so
...
00000000 DF *UND* 00000000 __cxa_finalize
...
为了 link libc.so 使用 -lc
标记进行了测试,没有它同样的问题。
构建时的其他依赖库:libgnustl_shared.so
为了欺骗编译器我们添加了
extern "C" int __cxa_finalize(void*); // { empty body somewhere in .cpp file }
没有帮助,有人可以指出问题所在吗? 注意:这在 Android 6 (Marshmallow)
之前一直有效UPD1:api版本android-9
、架构arm
、qtandroid编译armv5
、工具链版本 4.9
UPD2: 一些其他库显示 glibc 版本
00000000 w DF *UND* 00000000 GLIBC_2.2.5 __cxa_finalize
我在 运行我的应用程序中看到了同样的错误。你有:
System.loadLibrary("dl");
位于您的代码中的某处?如果是这样,我在 6 和 <6 上使我的代码 运行 所做的就是捕获并忽略 6 在尝试加载库时抛出的 UnsatisfiedLinkError 异常。