dlfcn.c、ld-linux.so和libdl.so有什么关系?
what's the relationship between dlfcn.c, ld-linux.so and libdl.so?
我是 C 和链接器的新手,如果我的问题听起来很奇怪,抱歉。
上网查了一下,dlfcn.c
、ld-linux.so
都叫动态链接器,然后是libdl.so
,顾名思义就是动态链接库,它们之间有什么关系?
dlfcn.c
和其他必要的 .C 文件是否用于生成 ld-linux.so
?如果是,那么 ld-linux.so
和 libdl.so
有什么区别?
ld-linux.so
...就是我所说的“动态链接器”:
当 ELF 文件需要动态库时,此文件由 Linux 内核与 ELF 文件一起加载。
文件ld-linux.so
包含将ELF文件所需的动态库(例如libc.so
)从磁盘加载到内存的代码。
libdl.so
此文件是一个动态库,包含 dlopen()
或 dlsym()
:
等函数
这些函数允许程序“动态”加载动态库 - 这意味着程序可以调用函数来加载动态库。
许多use-cases之一是用户可以在某些配置对话框中配置的plug-ins(因此这些plug-ins不会出现在存储在可执行文件中的所需文件列表中).
dlfcn.c
我不太确定,但这个文件似乎是 libdl.so
.
源代码的一部分
我是 C 和链接器的新手,如果我的问题听起来很奇怪,抱歉。
上网查了一下,dlfcn.c
、ld-linux.so
都叫动态链接器,然后是libdl.so
,顾名思义就是动态链接库,它们之间有什么关系?
dlfcn.c
和其他必要的 .C 文件是否用于生成 ld-linux.so
?如果是,那么 ld-linux.so
和 libdl.so
有什么区别?
ld-linux.so
...就是我所说的“动态链接器”:
当 ELF 文件需要动态库时,此文件由 Linux 内核与 ELF 文件一起加载。
文件ld-linux.so
包含将ELF文件所需的动态库(例如libc.so
)从磁盘加载到内存的代码。
libdl.so
此文件是一个动态库,包含 dlopen()
或 dlsym()
:
这些函数允许程序“动态”加载动态库 - 这意味着程序可以调用函数来加载动态库。
许多use-cases之一是用户可以在某些配置对话框中配置的plug-ins(因此这些plug-ins不会出现在存储在可执行文件中的所需文件列表中).
dlfcn.c
我不太确定,但这个文件似乎是 libdl.so
.