我正在尝试在惰性模式下使用 dlopen() 动态加载特定的共享库。 当然,共享库中存在未解析的符号,但惰性模式应该忽略它们。 它在 Linux 上确实会忽略它们,并且一旦在运行时使用这些符号,解析实际上就会发生。
但在 Android 中,它不起作用,尽管我使用惰性模式,dlopen()
由于未解析的符号而失败。
这是我正在谈论的代码
retval = dlopen(LOADLIB, RTLD_LAZY);
发生什么事了?
最佳答案
可能是因为 Android Bionic 不支持 RTLD_LAZY 模式,即使您使用 RTLD_LAZY 标志进行 dlopen,您也可以检查 Bionic 源代码以了解详细信息。
下面是棉花糖仿生代码 fragment :
bool soinfo::prelink_image() {
...
case DT_PLTGOT:
#if defined(__mips__)
// used by mips and mips64
plt_got_ = reinterpret_cast<ElfW(Addr)**>(load_bias + d->d_un.d_ptr);
#endif
// Ignore for other platforms... (because RTLD_LAZY is not supported)
break;
...
}
关于android - dlopen() 在 Android 上失败,但在 Linux 上有效,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18771459/