4

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

我的猜测是,修复只是装配例程的一些包装,可确保对齐正确,但我对这里的任何事情都不确定。

4

2 回答 2

10

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

http://www.microsoft.com/msj/0797/hood0797.aspx

每当一个目标文件(.o、.obj)引用某个外部符号时,它都会输出诸如“将地址 0 放入寄存器 5”之类的占位符代码和一条说明“用符号 'foo' 的实际地址填充那个 0”的注释. 其他一些目标文件将定义'foo',然后链接器将返回并“修复” 0 为正确的地址。

顺便说一句,如果没有人定义 'foo',你会得到 50 年代复古风格的错误消息,比如'找不到对 _foo 的引用',或者如果你使用 C++,则更难理解。

当 'foo' 的地址不适合链接器想要放置的位置时,您很少会收到“修复错误”。通常,这来自需要太大的相对偏移量的修复。

于 2009-07-06T22:45:38.300 回答
1

Linker and Loaders 是一个有趣的 inker 资源,它解释了很多行话,并且在这里和那里也包括非 x86 cpu:

http://www.iecc.com/linker/

来自 comp.compilers 版主。

于 2009-11-26T22:43:59.713 回答