链接器/编译器中的解析引用意味着什么?

时间:2016-02-27 16:07:16

标签: c compilation linker

我不完全理解为什么我们需要一个链接器。编译器首先将高级代码转换为汇编代码,然后将此汇编代码转换为机器代码。我们想要的一切(除了加载此代码的地址除外)都存在。为什么需要单独的链接器模块? 假设我的程序是

printf("Hello Basic Question!");

这个C代码转换为一堆汇编指令。当我们说Linker解析对printf的引用时,我不明白。你能详细说明吗? 这是否意味着在某些库中printf和汇编指令之间存在映射,链接器只是简单地将该映射拉出来并将printf替换为该映射?

1 个答案:

答案 0 :(得分:3)

printf是一个不在您的代码中但在对象库中的函数。 printf调用一些内核函数来输出您的消息。 链接器解析引用,从库中提取对象模块并将它们添加到可执行文件中。它还解析了对调用内核函数的引用,并生成了操作系统loader module用来分配内存,加载和执行代码的所有数据结构。