首页 > 解决方案 > 为什么 dlopen() 会在两个不同的调用中为同一个共享库返回两个不同的句柄?

问题描述

在我们的应用程序中,它的源代码太大以至于我无法弄清楚到底发生了什么,在 logcat 日志中,我看到一个dlopen()只是在其他返回不同的句柄之后被调用。这发生在相同的进程 ID 和相同的线程 ID 中。

这是日志片段:

10-13 09:22:55.582 29607 29673 I SharedLibraryLoader: loadCommonLibrary. dlopen(c++_shared, 1) successful. handle=0x1aeba53028b77b77

10-13 09:22:56.395 29607 29673 I SharedLibraryLoader: loadCommonLibrary. dlopen(c++_shared, 1) successful. handle=0x92f02f27fcc7e8a1

dlopen()手册页https://www.man7.org/linux/man-pages/man3/dlopen.3.html中,提到 If the same shared object is opened again with dlopen(), the same object handle is returned..

我怀疑这两个日志语句之间发生了一些事情,导致dlopen()返回不同的地址。如果有人以前遇到过类似的情况,请告诉我什么会导致这种行为。

标签: androidc++candroid-ndkdlopen

解决方案


推荐阅读