Compiler construction 修理的定义?

Compiler construction 修理的定义?,compiler-construction,linker,assembly,fixup,Compiler Construction,Linker,Assembly,Fixup,我在Python Lisp编译器和一些C链接器的源代码中看到了这个术语 我的猜测是,修复只是一个组装例程的包装,它确保对齐是正确的,但我对这里的任何内容都不确定。修复是一个链接器术语。这里有一个很好的讨论: 每当对象文件(.o、.obj)引用某个外部符号时,它都会输出占位符代码,如“将地址0放入寄存器5”和一条注释,上面写着“用符号“foo”的实际地址填充该0”。其他一些对象文件将定义“foo”,链接器将返回并“修复”0,使其成为正确的地址 顺便说一下,如果没有人定义“Foo”,你会得到复古5

我在Python Lisp编译器和一些C链接器的源代码中看到了这个术语

我的猜测是,修复只是一个组装例程的包装,它确保对齐是正确的,但我对这里的任何内容都不确定。

修复是一个链接器术语。这里有一个很好的讨论:

每当对象文件(.o、.obj)引用某个外部符号时,它都会输出占位符代码,如“将地址0放入寄存器5”和一条注释,上面写着“用符号“foo”的实际地址填充该0”。其他一些对象文件将定义“foo”,链接器将返回并“修复”0,使其成为正确的地址

顺便说一下,如果没有人定义“Foo”,你会得到复古50的风格错误信息,比如“不能找到对Foo的引用”,或者如果你使用C++,那么就不能理解。
当'foo'的地址与链接器想要放置的位置不匹配时,很少会出现“修复错误”。通常,这来自于需要过大的相对偏移量的修正。

链接器和加载程序是一个有趣的墨水资源,它解释了许多术语,并在这里和那里包括非x86 CPU:

来自comp.compilers版主