0

dlopen()我正在尝试使用惰性模式动态加载特定的共享库。共享库中当然有未解析的符号,但惰性模式应该忽略它们。它在 Linux 上确实会忽略它们,并且在运行时使用符号后实际上会发生解析。

但是在Android中,它不起作用,虽然我使用惰性模式,但dlopen()由于未解析的符号而失败。

这是我正在谈论的代码

retval = dlopen(LOADLIB, RTLD_LAZY); 

这是怎么回事 ?

4

2 回答 2

1

可能是因为 Android 仿生不支持 RTLD_LAZY 模式,即使您使用 RTLD_LAZY 标志进行 dlopen,您可以查看仿生源代码以获取详细信息。

以下是棉花糖仿生代码片段:

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;
...
}
于 2020-09-24T01:43:26.527 回答
0

通常仿生链接器在 cur 目录、system/lib 和 vendor/lib 中查找共享库。您可以检查 LD_LIBRARY 路径是否设置为包含您尝试链接的 lib 所在的文件夹。

于 2013-09-12T19:10:19.453 回答