CL 0x0 已经打开的共享库'/system/lib/libABC.so';无法在0x429e5a50中打开



在我的Android应用程序中,我遇到了此崩溃。谁能给出有关为什么发生崩溃的线索?

日志说:

共享lib'/system/lib/libabc.so'已经由Cl 0x0打开;无法在0x429E5A50

中打开

这是否意味着应用程序正在尝试使用。 System.loadLibrary("ABC")

可能是什么原因?

到目前为止,这就是理解。

根据Java类加载程序,同样的.So不能在不同的类中加载。在日志消息中" 共享lib'/system/lib/libabc.so'已经由Cl 0x0打开;无法在0x429E5A50 中打开。

我们可以看到Android代码的这一部分。这是Android代码的路径

/android/dalvik/vm/native.cpp

在此源文件中,如果我们从行号335到352观察代码的这一部分,我们可以看到导致我们进入此日志消息的代码路径。

   pEntry = findSharedLibEntry(pathName)
    if (pEntry != NULL) {
       if (pEntry->classLoader != classLoader) {
            LOGW("Shared lib '%s' already opened by CL %p; can't open in %p",
                pathName, pEntry->classLoader, classLoader);
            return false;
        }
        if (verbose) {
            LOGD("Shared lib '%s' already loaded in same CL %p",
                pathName, classLoader);
        }
        if (!checkOnLoadResult(pEntry))
            return false;
        return true;
    }

因此,在此代码中,如果您看到的,如果尝试加载同一库中的两个不同类,那么我们可以看到执行代码的以下部分。

   if (pEntry->classLoader != classLoader) {
        LOGW("Shared lib '%s' already opened by CL %p; can't open in %p",
            pathName, pEntry->classLoader, classLoader);
        return false;
    }

所以那就是我们撞车的地方。

感谢我的一位朋友提供此信息。感谢是否进行了任何编辑来添加有价值的信息。

欢呼!

相关内容

最新更新