Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/assembly/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Assembly 谁负责符号引用链接器或加载程序_Assembly_Compiler Errors_Compiler Construction_Linker_Loader - Fatal编程技术网

Assembly 谁负责符号引用链接器或加载程序

Assembly 谁负责符号引用链接器或加载程序,assembly,compiler-errors,compiler-construction,linker,loader,Assembly,Compiler Errors,Compiler Construction,Linker,Loader,我读了很多关于链接器或加载器的文章,但是 我不明白谁负责用对其他对象模块中位置的符号引用替换对象模块中的绝对引用。 链接器是否替换其他对象模块中的符号引用,或加载程序是否在主内存中的程序加载时执行此操作,传统上,解决对象模块之间的符号依赖关系是链接器的责任。链接器检查所有对象文件,解析所有符号引用,并构建一个整体可执行文件。但是,当我们引入共享库时,这种方法就失效了,即可以在不同的可执行文件之间共享并且在加载时链接到程序的对象模块。为了实现这一点,链接器的某些部分被移动到加载程序中,从而使依赖项

我读了很多关于链接器或加载器的文章,但是
我不明白谁负责用对其他对象模块中位置的符号引用替换对象模块中的绝对引用。
链接器是否替换其他对象模块中的符号引用,或加载程序是否在主内存中的程序加载时执行此操作,传统上,解决对象模块之间的符号依赖关系是链接器的责任。链接器检查所有对象文件,解析所有符号引用,并构建一个整体可执行文件。但是,当我们引入共享库时,这种方法就失效了,即可以在不同的可执行文件之间共享并且在加载时链接到程序的对象模块。为了实现这一点,链接器的某些部分被移动到加载程序中,从而使依赖项的解析成为共同的责任。链接器解析对象文件和静态库之间的依赖关系,而加载程序解析可执行文件和任何共享库之间的依赖关系。

您应该能够通过实验看到这一点。对象(汇编器/编译器)负责为它需要/拥有的东西放置符号名。链接器还将添加一些符号名,当然是针对链接器脚本中定义的项目,并且链接器是唯一可以全局连接对象之间点的链接器,因此,如果一个对象具有外部项,而另一个对象包含该项,则链接器会放置该项,并在将它们链接到一起时对两者进行更新。不确定加载程序在这方面的作用,因此定义内容有点晚请提供您感兴趣的对象和二进制中的数据项及其符号的示例。提供一个基本的例子。