UnsatisfiedLinkError dlopen失败的原因:无法找到符号

时间:2019-07-09 14:14:56

标签: android shared-libraries unsatisfiedlinkerror

我的apk中有两个共享库,名称分别为 libX.so libY.so libX.so 需要名为 ZNSt6__ndk112basic_stringIwN4wc1614wchar16_traitsENS_9allocatorIwEEED1Ev 的特定函数,该函数在 libY.so 中定义。因此,我们在构建时将 libX.so libY.so 链接。

我的应用程序首先加载 libY.so ,然后使用System.loadLibrary()加载 libX.so libY.so 已正确加载。但是在加载 libX.so 时,应用程序因以下错误而崩溃

java.lang.UnsatisfiedLinkError:dlopen失败:无法找到libX.so引用的符号“ ZNSt6__ndk112basic_stringIwN4wc1614wchar16_traitsENS_9allocatorIwEEED1Ev”。

要调试该问题,我验证了以下内容

  1. “ nm libY.so”->显示符号 ZNSt6__ndk112basic_stringIwN4wc1614wchar16_traitsENS_9allocatorIwEEED1Ev
  2. 在加载libX.so之后,我立即编辑了我的应用程序代码并称为dlsym(RTLD_DEFAULT, ZNSt6__ndk112basic_stringIwN4wc1614wchar16_traitsENS_9allocatorIwEEED1Ev )。 dlsym返回非空返回值,这意味着已加载符号。 仍然应用程序因相同的错误而崩溃。

即使调试2天后,我也无法弄清楚出了什么问题。

请问有人是否有其他可能导致此问题的原因。

此外,如果您除了我上面提到的这两种技术之外,还知道如何调试此问题,请提出建议。

谢谢

0 个答案:

没有答案