二进制文件的链接(如动态或静态链接)和符号链接之间是否存在任何关系?它们是否以某种方式相互作用,或者分享一些历史,或者这两个完全正交的概念只是碰巧被称为相似的?
答案1
一点也不。一种涉及将对文件名(任何类型的文件)的所有引用重定向到不同的文件(符号链接),另一种涉及通过将代码从库复制到可执行文件(静态链接)或引用动态库来构建可执行映像包含所需的代码并在运行时加载该动态库。
答案2
是的,他们对“链接”这个词有一个共同的含义,即“使用(文本)键查找命名资源”的抽象意义。首先查看“常规”类型的文件链接(硬链接)会很有帮助。
A硬链接是 Unix 目录中的一个条目,通过指向其名称将磁盘上的特定文件关联起来索引节点。当文件被访问(打开、stat
编辑)时,文件系统驱动程序查找与请求的名称相对应的索引节点。目录是一个将名称与inode编号连接起来的表;在此清单中,前面的数字是文件实际存储的 inode:
6951168 -rwxr-xr-x 1 christopher christopher 209 Apr 24 2014 CAPS
6951172 -rwxr-xr-x 1 christopher christopher 976 Aug 6 2012 offline
6951175 -rwxr-xr-x 1 christopher christopher 541 Apr 8 2014 records-backup.sh
6950166 -rwxr-xr-x 1 christopher christopher 778 Nov 4 07:05 switch-monitors.sh
A符号链接是一个功能,它不是直接指向 inode,而是指向一个内部有相对路径的特殊小文本文件。对于大多数用途,它看起来像一个常规的硬链接,并且它的名称也是通过类比而得名的。
A连接器ld.so
在执行类似于文件系统使用硬链接的操作的意义上。 C(和兼容)程序使用符号表它列出了程序想要从其他库调用的函数的名称。链接器查找与每个请求的名称相对应的函数的内存位置并填充它(精确的方式有所不同)。