斯蒂芬·基特写道https://unix.stackexchange.com/a/448943/674
ld.so
是一个共享的 ELF 对象,但它不需要解释器(它没有 .interp 条目);这是库的典型特征(共享可执行文件总是需要解释器;否则它们是静态的,而不是动态的)。
当且仅当 ELF 目标文件具有条目时,它才是“共享可执行文件”吗 .interp
?
“共享可执行文件”是什么意思?它与“共享库”相同吗?
或者“共享可执行文件”意味着“部分链接的可执行文件”?在CSAPP中
linux> gcc -o prog2l main2.c ./libvector.so
这将创建一个可执行目标文件 prog2l,其形式可以在运行时与 libvector.so 链接。
...当加载器加载并运行可执行文件时,它使用第 7.9 节中讨论的技术
prog2l
加载部分链接的可执行文件。prog2l
接下来,它注意到prog2l
包含一个.interp
部分,其中包含动态链接器的路径名,动态链接器本身就是一个共享对象(例如,ld-linux.so
在Linux系统上)。
答案1
当且仅当 ELF 目标文件具有 .interp 条目时,它才是“共享可执行文件”吗?
严格来说不是,因为它也可以是共享库。但所有“共享可执行文件”(我指的是动态链接)都有一个解释器条目,无论其 ELF 类型(EXEC
或DYN
)如何。
“共享可执行文件”是什么意思?它与“共享库”相同吗?
不,这不一样;我应该写“动态链接的可执行文件”。
或者“共享可执行文件”意味着“部分链接的可执行文件”?
这是另一种说法。