`dlopen()` 是否通过调用动态链接器 `ld-linux.so` 来执行动态链接?

`dlopen()` 是否通过调用动态链接器 `ld-linux.so` 来执行动态链接?

CSAPP 说

Linux系统提供了一个简单的接口动态链接器允许应用程序在运行时加载和链接共享库。

#include <dlfcn.h>
void *dlopen(const char *filename, int flag);

返回:如果成功则返回句柄指针,如果错误则返回 NULL

是否dlopen()通过调用动态链接器来执行动态链接ld-linux.so

是 调用执行动态链接ld-linux.so的动态链接器吗?dlopen()

谢谢。

答案1

dlopen由 提供libdl,但在幕后,至少使用 GNU C 库实现,后者依赖于 提供的符号来ld-linux.so执行动态链接。如果dlopen是从动态链接程序调用,ld-linux.so则已经加载,因此它直接使用这些符号;如果从静态链接程序调用它,它会尝试加载ld-linux.so.

相关内容