我正在尝试在延迟模式下使用dlopen()
动态加载特定的共享库。
共享库中当然存在未解析的符号,但是惰性模式应该忽略它们。
它确实在Linux上忽略它们,并且在运行时使用符号后实际解析。
但在Android中,它不起作用,虽然我使用延迟模式,dlopen()
因未解析的符号而失败。
这是我正在谈论的代码
retval = dlopen(LOADLIB, RTLD_LAZY);
发生了什么事?
答案 0 :(得分:0)
通常,仿生链接器在cur dir,system / lib和vendor / lib中查找共享库。您可以检查LD_LIBRARY路径是否设置为包含您尝试链接的lib所在的文件夹。
答案 1 :(得分:0)
也许是因为即使使用RTLD_LAZY标志进行dlopen,Android仿生系统也不支持RTLD_LAZY模式,所以您可以检查仿生源代码以获得详细信息。
下面是棉花糖仿生代码片:
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;
...
}